我想在Python中运行某个函数(重函数),但我不希望它运行超过X秒。例如,我想运行foo(),如果20秒后它没有完成处理,我希望我的程序继续运行。我不希望我的程序在foo()运行时继续运行,我希望它只在foo()完成或者20秒已经过去时才继续运行(所以线程不适合这里)
有什么建议吗?
答案 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
与问题中的假设相反,您也可以使用线程。您只需在调用时或直到超时(使用相同的连接调用 - 线程和多处理的接口相同)创建父线程块。
如果您需要函数的结果作为返回值,则同一页面上的管道和队列可以返回该值。