【问题标题】:Only allow certain number of seconds for ONE line of python一行 python 只允许一定的秒数
【发布时间】:2016-07-02 09:25:35
【问题描述】:

我想创建一个计时器,以便特定的代码行只有 60 秒的时间来处理。

def foo():

 for i in xrange(10):
      output = action(arg1, arg2)
      print i

如果此操作花费超过 60 秒,则不要打印 i,而是继续下一个。我该怎么做?

action 不是一个循环,所以计时器不起作用。我也尝试过信号,但这也不起作用,因为我有这些嵌套的内部循环,我收到一条错误消息:ValueError: signal only works in main thread // Werkzeug Debugger。

这是我迄今为止对信号的尝试以及我得到的错误:

文件名.py

class TimeoutException(Exception):   
     pass
def timeout_handler(signum, frame):   
     raise TimeoutException
signal.signal(signal.SIGALRM, timeout_handler)

def foo():
     signal.alarm(60)    
     try:
        output = foo2(arg1, arg2)
     except TimeoutException:
        continue 
    else:
        # Reset the alarm
        signal.alarm(0)

我这样做,而不是引发应该只是通过然后最终继续我的操作的异常,我得到了这个并且脚本终止了。

timeout_handler 中的第 X 行

引发超时异常

fileName.TimeoutException

【问题讨论】:

    标签: python timer exception-handling signals multiprocess


    【解决方案1】:
    import time
    for i in xrange(10):
        time_start = time.time()
        output = action(arg1, arg2)
        if time.time() - time_start <= 60:
            print i
    

    【讨论】:

    • 从最初的问题陈述看来,如果函数调用的时间超过 60 秒,则不需要引发异常。我只是通过采取平局差异来比较声明的方式。如果超过 60 秒,则不会打印循环变量;它只是继续做它正在做的事情。
    • 嘿乔,在您提供的代码中, output = action(arg1, arg2) 可能短至 1 秒或长达 2 分钟。如果需要超过 60 秒,我想终止该操作并继续下一个操作。
    • 抱歉是2小时*
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2022-11-19
    • 2017-06-05
    • 2017-10-04
    相关资源
    最近更新 更多