私は、マルチプロセッシングライブラリでPython 2.7.11(Windows上)でタイムアウト関数を作成しようとしています。マルチプロセスでのPythonでのタイムアウト関数の作成
基本的な目標は、関数がタイムアウトした場合は1つの値を返し、タイムアウトしない場合は実際の値を返すことです。
私のアプローチは以下の通りです:
from multiprocessing import Process, Manager
def timeoutFunction(puzzleFileName, timeLimit):
manager = Manager()
returnVal = manager.list()
# Create worker function
def solveProblem(return_val):
return_val[:] = doSomeWork(puzzleFileName) # doSomeWork() returns list
p = Process(target=solveProblem, args=[returnVal])
p.start()
p.join(timeLimit)
if p.is_alive():
p.terminate()
returnVal = ['Timeout']
return returnVal
そして、私はこのような関数を呼び出す:
if __name__ == '__main__':
print timeoutFunction('example.txt', 600)
残念ながら、これは動作しないと私はpickle.pyでEOFエラーのいくつかの並べ替えを受け取ります
誰かが間違っているのを誰でも見ることができますか?事前に
おかげで、
アレクサンダー
編集: doSomeWork()は、実際の関数ではありません。私がする他の仕事のためのちょうどフィラー。その作業は並行して行われず、共有変数を使用しません。私は単一の関数を実行しようとしているだけで、おそらくタイムアウトにしています。
doSomeWorkとは何ですか? –
ちょうどフィラー機能。私の実際のsolveProblem()はそうではありません。私の問題を単純化しようとしていたのですが、関数の内容がうまくいくので見てください。 –