У меня есть каталог, который содержит список файлов, которые нуждаются в запуске. Это довольно вычислительно тяжелые задачи, поэтому я ищу лучший способ для запуска нескольких файлов once.My первой функции для представления задач были:Запуск нескольких исполняемых файлов через python сразу
def copasiSE_batch_run(self):
os.chdir(self.IA_dir) #dir containing files
count=0
for i in glob.glob('*.cps'):
os.system('CopasiSE '+i)
count = count+1
print '\n\n\n {}:\tProfile liklihood for {} has been calcualted'.format(count,i)
Это нормально, и он работает, но использует только один процесс, ждет пока один файл не будет завершен, а затем запустит следующий. Поскольку это самостоятельные задачи, было бы хорошо, если бы я мог больше двигаться в одно и то же время. Затем я попробовал:
def copasiSE_batch_run_subprocess(self):
os.chdir(self.IA_dir)
for i in glob.glob('*.cps'):
command='CopasiSE '+i
subprocess.Popen(command)
Это также работает, но дает мне противоположную проблему. У меня есть 32 файла, которые нуждаются в запуске, и эта функция, кажется, запускает их все сразу, так что мой компьютер в основном неприменим до тех пор, пока он не будет выполнен. Каким будет наилучший способ найти хороший баланс между количеством запущенных программ одновременно и достаточным уровнем мощности компьютера, чтобы выполнить некоторые достаточно низкоинтенсивные задачи?
Привет, Джонатан, спасибо за ответ. Это хорошее решение и хорошо работает, но для полноты вам известно, есть ли способ ограничить количество файлов, которые запускаются (скажем) 8 за раз, до тех пор, пока все задания не будут завершены? Cheers – CiaranWelsh
Я могу дать вам идею, но я не знаю, как выразить это в коде. вам придется использовать цикл или условный оператор. while commands.running> = 8: pause script – Jonathan