呼び出したいのですfoo(n)
が、10秒以上実行されている場合は停止します。これを行う良い方法は何ですか?
理論的には、foo
自分自身を変更して、実行されている時間を定期的に確認できることがわかりますが、そうしないことをお勧めします。
呼び出したいのですfoo(n)
が、10秒以上実行されている場合は停止します。これを行う良い方法は何ですか?
理論的には、foo
自分自身を変更して、実行されている時間を定期的に確認できることがわかりますが、そうしないことをお勧めします。
どうぞ:
import multiprocessing
import time
# Your foo function
def foo(n):
for i in range(10000 * n):
print "Tick"
time.sleep(1)
if __name__ == '__main__':
# Start foo as a process
p = multiprocessing.Process(target=foo, name="Foo", args=(10,))
p.start()
# Wait 10 seconds for foo
time.sleep(10)
# Terminate foo
p.terminate()
# Cleanup
p.join()
これは 10 秒待っfoo
てから kill します。
アップデート
プロセスが実行中の場合にのみ、プロセスを終了します。
# If thread is active
if p.is_alive():
print "foo is running... let's kill it..."
# Terminate foo
p.terminate()
更新 2: 推奨
とともに使用join
しtimeout
ます。foo
タイムアウト前に終了した場合、main は続行できます。
# Wait a maximum of 10 seconds for foo
# Usage: join([timeout in seconds])
p.join(10)
# If thread is active
if p.is_alive():
print "foo is running... let's kill it..."
# Terminate foo
p.terminate()
p.join()
import signal
#Sets an handler function, you can comment it if you don't need it.
signal.signal(signal.SIGALRM,handler_function)
#Sets an alarm in 10 seconds
#If uncaught will terminate your process.
signal.alarm(10)
タイムアウトはあまり正確ではありませんが、極端な精度が必要ない場合は可能です。
もう 1 つの方法は、リソースモジュールを使用して、最大 CPU 時間を設定することです。