Я тестирую свой код с докером для многопроцессорной реализации, в которой мне нужны процессы для запуска независимо от родителя, и они просто запускаются до завершения и не нуждаются в том, чтобы передавать что-либо обратно родительскому.Докеры выходят перед тем, как вилка завершает выполнение?
Я реализовал приложение двумя способами на всякий случай, если один разрывается, один с многопроцессорной (mp) библиотекой, другой с простой вилкой (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) линии вилки не выполняются последовательно и больше не параллельно ...