私はPythonの初心者です。私は最近、プロセスが長い時間を必要とするコンソールexeを呼び出すためにPythonスクリプトを使用しようとしました。私はexeがCPUが許すことができる何度でも呼び出されるようにします。そしてexeが完了したら、その仕事。 CPUを他の新しいジョブに解放する必要があります。ですから、私は複数のプロセス制御機構が必要かもしれないと思います。Pythonマルチプロセッシングで複数の長時間実行されるコンソールEXEを制御できないのですか?
マルチプロセッシングは、python呼び出し可能関数のみを呼び出すことができるためです。コンソールexeを直接呼び出すことはできません。私はpyprocess関数で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
私が使ったのはあなたがそこに書いたものです。しかし、私のファイル名にはスペースがあります。それには引数が付いているからです。私の "cmd"は "* .exe xyz"のようなものです。サブプロセスに問題はありません。しかし、マルチプロセッシングの処理の引数に "cmd"という文字列全体を置くと、それは "picklingerror"のエラーを報告します – Mua
cmd文字列にスペースを入れずに再試行しました。 exeファイルのみ。それでもエラーが報告されます。私はPython 2.6を使用しています。 – Mua