自定义线程定时器终止函数Python

问题描述 投票:0回答:1

我有一个带有线程设置的队列。如果进程运行时间超过 2900 秒,我需要它来终止该进程,这可以正常工作。如果由于运行时间太长而必须终止该进程,我想写出信息。有没有办法为这一行编写自定义函数:

timer = Timer(2900, recover.kill)

至:

timer = Timer(2900, custom_function(recover))

在调用recover.kill之前我可以在哪里运行custom_function来做一些事情?我尝试这样做,但它不起作用。

while not q.empty():
try:
    cmd = "itf -obj " + q.get()
    recover = subprocess.Popen(shlex.split(cmd), env=my_env, shell=False)
    timer = Timer(2900, recover.kill)
    try:
        timer.start()

        my_pid, err = recover.communicate()
        recover.wait()
        q.task_done()
    finally:
        print("Completed before time")
        timer.cancel()
except Exception as e:
    q.task_done()
    continue

谢谢!

python multithreading timer kill
1个回答
0
投票

您可以像这样定义自定义函数:

def custom_function(recover):
    print("Some relevant information")
    recover.kill()

然后您必须将此函数传递给计时器。但要小心 -

custom_function(recover)
不是一个函数! Python 首先对其求值,然后将结果传递给 Timer,因此这更接近
Timer(2900, None)
。 (它也会立即终止您的进程。)

您可以使用 lambda 表达式:

timer = Timer(2900, lambda recover: custom_function(recover))
© www.soinside.com 2019 - 2024. All rights reserved.