0

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

有什么建议么?

4

1 回答 1

1

“直截了当”的方法是在函数内保持一个初始化时间,并在合理的时间(开始、循环结束、数据写入之前/之后等)检查当前时间。当然,这不一定会在 20 秒后停止,并且如果您的 foo() 在内部的任何时间点挂起,也不会起作用。

否则,您可能正在看这个: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

与您在问题中的假设相反,您也可以为此使用线程。您只需让父线程在调用时阻塞或直到超时(使用相同的连接调用——线程和多处理的接口是相同的)。

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

于 2012-04-18T18:54:35.257 回答