如何在超时时终止多进程进程



在启动proc5 秒后,使用proc.terminate()命令在此处终止多处理proc。我正在使用while proc.is_alive()循环来完成工作。我想知道是否有另一种方法可以在超时时终止进程。

import time, multiprocessing
def process():
while True:
print '...sleeping %s' % time.time()
time.sleep(1)
proc = multiprocessing.Process(target=process)
proc.start()
timeout = 5
start_time = time.time()
while proc.is_alive():
if time.time() - start_time > timeout:
print 'terminating proc on timeout'
proc.terminate()
time.sleep(1)

后来编辑:这个问题被标记为重复,指向另一个讨论多处理的帖子。进程的terminatejoin方法。它不讨论超时时的终止。

您可以将Process.join与其timeout参数一起使用,以在指定的时间内阻止调用线程(在您的示例中为父进程中的主线程(。.join将等待可能的进程退出长达timeout秒,之后它将取消阻止。这使您能够编写:

import time, multiprocessing

def process():
while True:
print('...sleeping %s' % time.time())
time.sleep(1)

if __name__ == '__main__':
proc = multiprocessing.Process(target=process)
proc.start()
proc.join(timeout=5)
proc.terminate()

确保您的流程实际上适合以这种方式终止。这意味着它不应该与其他进程共享资源(例如队列(,因为当终止的进程此时保持锁时,这将导致死锁。

最新更新