2016-10-06 3 views
0

У меня есть этот Баш скрипт:Запуск питон параллельно

#!/bin/bash 
for i in `seq 1 32`; 
do 
python run.py file$i.txt & 
if (($i % 10 == 0)); then wait; fi 
done 
wait 

Я хочу, чтобы запустить его на кластере с 64 ядрами. Как распределить 10 файлов среди ядер? ЕСЛИ у меня есть 10 бесплатных ядер одновременно, каждое ядро ​​будет принимать один файл, или есть более сложный способ? Кроме того, если все руды бесплатны, я должен запускать 64 файла за раз, или он может столкнуться с проблемами, если я буду использовать их все (например, программа может быть замедлен из-за проблем с памятью?

+1

Я бы просто использовал пакет многопроцессорности (https://docs.python.org/2/library/multiprocessing.html). создать пул вакансий и определить максимальное количество ядер. Каждый из них просто вернется в бассейн, как только он выполнит свою работу, и выберите новый, если есть один ... –

ответ

0

Когда вы запускаете скрипты из оболочки в паралели, вы делегируете ответственность за управление процессом планировщику ОС, что неплохая идея, потому что ОС хорошо знает, как обрабатывать процессы через процессорные ядра, но иногда вам нужно больше контролировать задачи (возможно, потому, что вы выполняете действительно большое количество задач), если это так, на мой взгляд, лучший подход будет выполнять ваши задачи с использованием модуля многопроцессорности python и запрограммировать логику выполнения задач.

Смежные вопросы