Я новичок в Python. Недавно я попытался использовать Python script для вызова консольного exe, для процесса которого требуется длительное время. Я позволю exe быть вызванным столько раз, сколько может позволить процессор. И когда exe закончил свою работу. Он должен выпустить CPU на другие новые рабочие места. Поэтому я думаю, что мне может понадобиться механизм управления несколькими процессами.
Поскольку многопроцессорность может вызывать только вызываемую функцию python. Он не может напрямую вызвать консоль exe. Я завернул subprocess.Popen(cmd) в функции python. Однако после того, как я это сделал, я обнаружил, что перед многопроцессорной обработкой используется метод .Process.start(). EXE уже начался. И проблема в том, до того, как она закончит то, что она делает (нужно долгое время), она не возвращает мне контроль. Программа замораживается, чтобы ждать. Это не то, что я хочу.
Я отправляю коды, как показано ниже:
import sys
import os
import multiprocessing
import subprocess
def subprocessExe(cmd):
return subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, \
stderr=subprocess.PIPE,creationflags=0x08000000)
if __name__ == '__main__':
p = multiprocessing.Process(target=self.subprocessExe(exeFileName))
p.start()
print p, p.is_alive()
Спасибо за ваше время!
Вы вызываете subprocessExec
при создании объекта multiprocessing.Process
. Вы должны сделать это:
p = multiprocessing.Process(target=subprocessExec, args=(exeFileName,))
И тогда он должен работать.
В вашем тестовом случае существует множество ошибок. Следующая работа для меня:
import multiprocessing, subprocess
def subprocessExe(cmd):
subprocess.call([cmd], shell=False)
p = multiprocessing.Process(target=subprocessExe, args=('/full/path/to/script.sh',))
p.start()
ИЛИ
subprocess.call([cmd], shell=True)
p = multiprocessing.Process(target=subprocessExe, args=('script.sh',))
ИЛИ
subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE, \
stderr=subprocess.PIPE)
p.daemon = True
перед p.start ()