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

Timer 限制命令在Python中运行的时间,timer,python-3.x,wait,Timer,Python 3.x,Wait,我想在Python中运行某个函数(重函数),但我不希望它运行超过X秒。例如,我想运行foo(),如果20秒后它没有完成处理,我希望我的程序继续运行。我不希望我的程序在foo()运行时继续运行,我希望它只有在foo()完成或20秒后才能继续运行(因此线程在这里不适合) 有什么建议吗 简单的方法是在函数中保持初始时间,并在合理的时间(循环开始、结束、数据写入之前/之后,等等)检查当前时间。当然,这不一定会在20秒时停止,如果您的foo()在内部的任何一点挂起,它也不会起作用 否则,您可能会看到: 如

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

有什么建议吗

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

否则,您可能会看到:

如果您的方法是处理套接字,那么来自Python标准库的方法也可能很有用

编辑:要进行更深入的操作(从):

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


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

谢谢您的回答。Unfourntaley我试图运行的函数不是我的,即使我可以更改它,由于项目类型的原因,我也不被允许。所以我不能在函数中添加时间标记。关于多加工的建议,我将尝试一下。我还将尝试您建议的线程方法。谢谢你的时间!呵呵,是的,第一个建议只适用于不需要使用任何库的情况,这在Python中很愚蠢。这与其说是个拙劣的笑话,不如说是别的什么。不过,多处理/线程技术应该可以帮助您实现这一目标。
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