私は自分のコードをドッカーでテストしています。マルチプロセスの実装では、プロセスを親プロセスと独立して実行する必要があり、プロセスが完了するまで実行され、親プロセスに何も通知する必要はありません。フォークが完了する前にDockerが終了しますか?
私は2つの方法でアプリケーションを実装しました.1つはブレーク、もう1つはマルチプロセッシング(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)
Iはos._exitを削除した場合(0)フォークを並列に順次もはや実行しないライン...