У меня есть Python script, который я хочу использовать в качестве контроллера для другого Python script. У меня есть сервер с 64 процессорами, поэтому вы хотите создать до 64 дочерних процессов этого второго Python script. Ребенок script вызывается:
$ python create_graphs.py --name=NAME
где NAME - это что-то вроде XYZ, ABC, NYU и т.д.
В моем родительском контроллере script я извлекаю переменную имени из списка:
my_list = [ 'XYZ', 'ABC', 'NYU' ]
Итак, мой вопрос: какой лучший способ вывести эти процессы в качестве детей? Я хочу ограничить число детей до 64 за раз, поэтому нужно отслеживать статус (если дочерний процесс завершен или нет), поэтому я могу эффективно поддерживать работу всего поколения.
Я изучил использование пакета подпроцессов, но отклонил его, потому что он порождает только одного ребенка за раз. Наконец, я нашел многопроцессорный пакет, но я признаю, что он перегружен всей документацией по потокам и подпроцессам.
В настоящее время мой script использует subprocess.call
только для порождения одного ребенка за раз и выглядит так:
#!/path/to/python
import subprocess, multiprocessing, Queue
from multiprocessing import Process
my_list = [ 'XYZ', 'ABC', 'NYU' ]
if __name__ == '__main__':
processors = multiprocessing.cpu_count()
for i in range(len(my_list)):
if( i < processors ):
cmd = ["python", "/path/to/create_graphs.py", "--name="+ my_list[i]]
child = subprocess.call( cmd, shell=False )
Я действительно хочу, чтобы он породил 64 ребенка за раз. В других вопросах stackoverflow я видел людей, использующих Queue, но похоже, что это создает хит производительности?