У меня есть программа на Python, в какой-то момент она вызывает внешнюю программу (foo).Эту внешнюю программу нужно запускать несколько раз.Точное число раз (num_pros) является переменным и зависит от ввода.Поскольку эта внешняя программа является самой трудоемкой частью моей программы на Python, я хотел бы использовать преимущества многоядерных процессоров для одновременного запуска нескольких экземпляров внешней программы.
Я пришел со следующим решением, которое учитывает, что num_pros априори неизвестен и что решение должно быть адаптировано к любому количеству ядер.
cores=2
proc_list=[]
for i in range(0,num_pros):
proc=Popen(['foo'], stdin=PIPE)
proc_list.append(proc)
if i%cores == cores-1:
for process in proc_list:
process.wait()
У меня два вопроса:
Есть лучшее (более эффективное или питонное) решение?
Этот код сокращает время выполнения только тогда, когда ядра реальны,Это аппаратная проблема?Или что-то, что можно исправить с помощью python?
Для пояснения второго вопроса приведу пример.В моей записной книжке (под управлением Linux) comnand 'cat / proc / cpuinfo |процессор grep |wc -l 'указывает на наличие 4 процессоров, если я использую в своем коде cores = 2, я получаю результаты в два раза быстрее (как и ожидалось), но при использовании core = 3 или core = 4 я получаю такую же производительность, как и приядра = 2.У меня есть Intel Core I3 (2 ядра и 4 потока), поэтому я предполагаю, что проблема в том, что только 2 ядра являются реальными (я тестирую код на другом компьютере / процессоре, и получаю тот же результат, что полезны только реальные ядра).