为了账号安全,请及时绑定邮箱和手机立即绑定

函数调用的超时

函数调用的超时

神不在的星期二 2019-05-31 16:29:29
函数调用的超时我正在用Python调用一个函数,我知道这个函数可能会停止并迫使我重新启动脚本。如何调用该函数,或者如何将其封装,以便如果需要超过5秒的时间,脚本就会取消它并执行其他操作。
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以使用信号如果您在UNIX上运行,那么包:

In [1]: import signal# Register an handler for the timeoutIn [2]: def handler(signum, frame):
   ...:     print "Forever is over!"
   ...:     raise Exception("end of time")
   ...: # This function *may* run for an indetermined time...In [3]: def loop_forever():
   ...:     import time   ...:     while 1:
   ...:         print "sec"
   ...:         time.sleep(1)
   ...:         
   ...:         # Register the signal function handlerIn [4]: signal.signal(signal.SIGALRM, handler)Out[4]: 0# Define a timeout for your
    functionIn [5]: signal.alarm(10)Out[5]: 0In [6]: try:
   ...:     loop_forever()
   ...: except Exception, exc: 
   ...:     print exc   ....: sec
sec
sec
sec
sec
sec
sec
secForever is over!end of time# Cancel the timer if the function returned before timeout# (ok, mine won't but yours maybe will :)In [7]: 
signal.alarm(0)Out[7]: 0

通话后10秒alarm.alarm(10),则调用处理程序。这会引发一个异常,您可以从常规Python代码中截获该异常。

这个模块不能很好地处理线程(但是,是谁呢?)

请注意由于我们在超时发生时引发异常,因此它最终可能会在函数中被捕获和忽略,例如其中一个这样的函数:

def loop_forever():
    while 1:
        print 'sec'
        try:
            time.sleep(10)
        except:
            continue


查看完整回答
反对 回复 2019-05-31
  • 3 回答
  • 0 关注
  • 554 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信