これは私がやったことです。あなたがより良い解決策を持っているなら、共有してください!
import threading
import time
# my function that I want to run with a timeout
def foo(val1, val2):
time.sleep(5)
return val1+val2
class RunWithTimeout(object):
def __init__(self, function, args):
self.function = function
self.args = args
self.answer = None
def worker(self):
self.answer = self.function(*self.args)
def run(self, timeout):
thread = threading.Thread(target=self.worker)
thread.start()
thread.join(timeout)
return self.answer
# this takes about 5 seconds to run before printing the answer (8)
n = RunWithTimeout(foo, (5,3))
print n.run(10)
# this takes about 1 second to run before yielding None
n = RunWithTimeout(foo, (5,3))
print n.run(1)
whileループの代わりに 'thread.join(timeout)'だけではないのはなぜですか? –
タイムアウトが10秒に設定されていても、関数が1秒で終了した場合、whileループがなければ、9秒間不必要に待機することになると思います。このようにして、少し速く結果を得ることができます。私が間違っていると私を訂正してください。 – florisvb
これは間違っています、 'thread.join()'はタイムアウトまたは 'thread'が死ぬとすぐに戻ります。 –