如果需要很长时间,python超时功能

时间:2018-01-25 15:56:35

标签: python multithreading python-2.7 signals

假设我有一个功能

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)

1 个答案:

答案 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()