假设我有一个功能
def may_take_a_long_time():
while 1:
# do something
if met_condition():
break
timeout_dur = 600
may_take_a_long_time()
do_something_else()
如果may_take_a_long_time()
需要的时间超过timeout_dur
,我可以做什么,以便中止其执行的任何操作,然后继续w / do_something_else()
或许,在致电SIGALARM
之前设置may_take_a_long_time()
?我怎么做?或者在发生异步的线程中运行may_take_a_long_time()
,这样我可以在调用者的线程中拥有time.sleep(timeout_dur)
?
答案 0 :(得分:0)
python中的线程有怪癖,如果你想要一个特定的答案,我建议你编辑你的问题并把它放在前面。
对于简单的单线程,你可以像其他用户建议的那样使用现有的超时装饰器,或者你可以自己做,或者你可以做这样的事情(如果你期望may_take_a_long_time(),你必须定制代码但要回报一些东西:
import time
def may_take_a_long_time(tout):
timeout = time.time() + tout
passed = False
while not passed:
passed = met_condition()
if time.time() > timeout:
break
def met_condition():
if some_condition:
return True
else:
return False
def do_something_else():
# TODO your code here
if '__name__' == '__main__':
may_take_a_long_time(30)
do_something_else()