Ich teste meinen Code mit Docker für eine Multi-Prozess-Implementierung, die ich die Prozesse unabhängig von seinem übergeordneten ausführen müssen und sie einfach ausgeführt werden, um keine zurück zu dem übergeordneten zu kommunizieren.Docker wird beendet, bevor fork die Ausführung beendet?
Ich habe die Anwendung auf zwei Arten implementiert, nur für den Fall, dass einer bricht, eine mit Multiprocessing (mp) -Bibliothek, die andere mit einer einfachen Gabel (f). Dies funktioniert perfekt mit mp, weil es Anweisungen gibt, auf den Prozess zu warten, bevor das Eltern-Exit abgeschlossen ist. Ich dachte jedoch, dass der Container darauf warten würde, dass die Teilprozesse abgeschlossen werden, selbst wenn das übergeordnete Element beendet wird. Kennt jemand einen Workaround dafür mit Docker + fork?
Mehrprozess
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()
fork
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)
Wenn ich die os._exit (0) zu entfernen Linie die Gabeln sequentiell ausführen und nicht mehr parallel ...