在fork完成执行之前,Docker是否退出?

时间:2016-04-12 09:11:21

标签: python docker multiprocessing fork python-multiprocessing

我正在使用docker测试我的代码以实现多进程实现,我需要独立于其父进程运行它们,并且它们只是运行完成而不需要将任何内容传回给父进程。

我已经以两种方式实现了应用程序,以防万一中断,一个使用多处理(mp)库,另一个使用简单的fork(f)。这与mp完美配合,因为它具有在父进程退出之前等待进程完成的指令。但是我认为即使父进程退出,容器也会等待子进程完成。有没有人知道使用Docker + fork的解决方法?

多进程

imdata = [pools.apply_async(detector_optimized.run_full_detection, (gpu_slot, batch_jobs[gpu_slot][0],
                            batch_jobs[gpu_slot][1], src, dst, ext)) for gpu_slot in xrange(num_jobs)]

# Wait for all subprocesses to complete
map(lambda x: x.get(), imdata)
pools.close()
pools.join()

for gpu_slot in xrange(len(batch_jobs)):
    pid = os.fork()
    if pid == 0:
        detector_optimized.run_full_detection( gpu_slot, batch_jobs[gpu_slot][0], batch_jobs[gpu_slot][1],
                                               src, dst, detector_optimized.vars.get_EXTENSION( ) )
        os._exit(0)

如果我删除了os._exit(0)行,那么forks按顺序执行,不再并行执行...

1 个答案:

答案 0 :(得分:0)

当PID 1的进程退出时,Docker容器退出。任何其他进程都将被忽略。 如果容器中有多个进程,则可以使用等待所有进程完成的工具,然后退出。该工具将具有PID 1。 您可以查看Supervisor,Monit,Chaperone。