在proc
启动5秒钟后,使用proc.terminate()
命令在此处终止多处理proc
。我正在使用while proc.is_alive()
循环来完成任务。我想知道是否还有另一种方法可以在超时时终止proc。
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
方法。它没有讨论超时终止。答案 0 :(得分:1)
您可以将Process.join
与它的timeout
参数一起使用,以在指定时间内阻止调用线程(在您的示例中为父进程的MainThread)。 .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()
确保您的过程实际上适合以这种方式终止。这意味着它不应与其他进程共享资源(例如队列),因为当终止进程此时持有锁时,这将导致死锁。