alp*_*ric 1 python multiprocessing
多处理在启动5 秒后proc使用命令终止。我正在使用循环来完成事情。我想知道是否有另一种方法可以在超时时终止进程。proc.terminate()procwhile 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参数来阻止调用线程(在您的示例中是父进程中的 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()
确保您的进程实际上适合以这种方式终止。这意味着它不应该与其他进程共享资源(例如队列),因为当终止的进程当时持有锁时,这将导致死锁。