我是Python的新手。我最近嘗試使用Python腳本來調用一個需要很長時間的進程的控制檯exe文件。我會允許exe被多次調用,因爲CPU可以允許。當exe文件完成工作時。它應該釋放CPU到其他新的作業。所以我想我可能需要多重過程控制機制。python multiprocessing無法控制多個長時間運行的控制檯exe文件?
由於多處理只能調用python callable函數。它不能直接調用控制檯EXE。我在python函數中包裝了subprocess.Popen(cmd)。然而,在我這樣做之後,我發現在多處理之前使用了.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()
謝謝您的時間!
我嘗試這樣做。這是行不通的。在Python自己的forking.py模塊中出現錯誤。 – Mua 2011-05-26 14:09:01
我用的正是你在那裏寫的。但我的文件名在那裏有一個空間。因爲它有爭論。所以我的「cmd」就像是「* .exe xyz」。它與子進程沒有問題.Popen。但是如果我把整個字符串「cmd」放在multiprocessing.processing的arg中。它報告「picklingerror」的錯誤 – Mua 2011-05-26 14:12:09
在cmd字符串中再次嘗試沒有空格。只有一個exe文件。它仍然報告錯誤。我正在使用Python 2.6。 – Mua 2011-05-26 14:19:20