限制命令在Python中运行的时间

时间:2012-04-18 18:44:07

标签: timer python-3.x wait

我想在Python中运行某个函数(重函数),但我不希望它运行超过X秒。例如,我想运行foo(),如果20秒后它没有完成处理,我希望我的程序继续运行。我不希望我的程序在foo()运行时继续运行,我希望它只在foo()完成或者20秒已经过去时才继续运行(所以线程不适合这里)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

“简单”的方法是在函数内保持初始化时间,并在合理的时间(开始,循环结束,数据写入之前/之后,等等)检查当前时间。当然,这不一定会在20秒内停止,如果你的foo()在内部任何一点悬挂,它将无法工作。

否则,你可能会看到这个:Asynchronous method call in Python?

如果您的方法处理套接字,Python标准库中的asyncore也可能有用。

编辑:更深入(来自http://docs.python.org/library/multiprocessing.html#multiprocessing.Process):

import multiprocessing

#identity function, replace with your actual foo
def foo(x):
    return x

if __name__ == '__main__':
    foo_args = #some tuple containing non-kw arguments for your function
    foo_kwargs = #some dict containing kw arguments for your function

    proc = multiprocessing.Process(target=foo,args=foo_args,kwargs=foo_kwargs)

    proc.start()
    proc.join(20) #This takes a timeout argument in seconds

与问题中的假设相反,您也可以使用线程。您只需在调用时或直到超时(使用相同的连接调用 - 线程和多处理的接口相同)创建父线程块。

如果您需要函数的结果作为返回值,则同一页面上的管道和队列可以返回该值。