2016-03-04 4 views
0

У меня есть каталог, который содержит список файлов, которые нуждаются в запуске. Это довольно вычислительно тяжелые задачи, поэтому я ищу лучший способ для запуска нескольких файлов 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 файла, которые нуждаются в запуске, и эта функция, кажется, запускает их все сразу, так что мой компьютер в основном неприменим до тех пор, пока он не будет выполнен. Каким будет наилучший способ найти хороший баланс между количеством запущенных программ одновременно и достаточным уровнем мощности компьютера, чтобы выполнить некоторые достаточно низкоинтенсивные задачи?

ответ

1

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

+0

Привет, Джонатан, спасибо за ответ. Это хорошее решение и хорошо работает, но для полноты вам известно, есть ли способ ограничить количество файлов, которые запускаются (скажем) 8 за раз, до тех пор, пока все задания не будут завершены? Cheers – CiaranWelsh

+0

Я могу дать вам идею, но я не знаю, как выразить это в коде. вам придется использовать цикл или условный оператор. while commands.running> = 8: pause script – Jonathan

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