后来编辑:这个问题被标记为重复,指向另一个讨论多处理的帖子。进程的
在启动proc
5 秒后,使用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)
后来编辑:这个问题被标记为重复,指向另一个讨论多处理的帖子。进程的terminate
和join
方法。它不讨论超时时的终止。
您可以将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()
确保您的流程实际上适合以这种方式终止。这意味着它不应该与其他进程共享资源(例如队列(,因为当终止的进程此时保持锁时,这将导致死锁。