2016-04-12 21 views
0

Birden çok işlem uygulaması için kodumu docker'la test ediyorum; bunun için, kendi ebeveynden bağımsız olarak çalışacak işlemlere ihtiyacım var ve bunlar yalnızca tamamlamaya çalışıyor ve herhangi bir şeyi ebeveynle iletişim kurmasına gerek yok.Çatal çatal çalıştırılmadan önce çıkar?

Uygulamayı iki yolla uyguladıktan sonra sadece bir kırılma durumunda, çoklu işlem (mp) kütüphanesi, diğeri basit bir çatal (f) ile. Bu, mp ile mükemmel bir şekilde çalışır çünkü işlemin ana çıkıştan önce tamamlanmasını beklemek için yönergeleri vardır. Ancak, kapsayıcının çıkarsa bile kapsayıcının alt işlemlerin tamamlanmasını bekleyeceğini düşündüm. Docker + fork ile bunun için bir geçici çözüm bilen var mı?

çok işlemli

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() 

çatal I os._exit çıkarın (0) çatal sırayla ve artık paralel çalıştırmak hat

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) 

...

cevap

0

Docker konteyner PID 1 ile işlemden çıktığında çıkar. Başka herhangi bir süreç göz ardı edilir. Bir kapsayıcıda birden çok işleminiz varsa, tüm işlemlerin tamamlanmasını bekleyen bir araç kullanabilir ve ardından çıkabilirsiniz. Bu araç PID 1'e sahip olur. Süpervizör, Monit, Şaperon'u kontrol edebilirsiniz.

İlgili konular