我有一个带有线程设置的队列。如果进程运行时间超过 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
谢谢!
您可以像这样定义自定义函数:
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))