2016-07-22 10 views
8

Mam kod za pomocą multi-proces tak:Czy możemy uruchomić program wieloprocesowy w oknie dokowanym?

import multiprocessing 
from multiprocessing import Pool 

pool = Pool(processes=100) 
result = [] 

for job in job_list:   
    result.append( 
     pool.apply_async(
      handle_job, (job) 
      ) 
     ) 
pool.close() 
pool.join() 

Ten program robi ciężkie obliczenia na bardzo dużego zbioru danych. Dlatego potrzebujemy wielu procesów, aby obsłużyć pracę jednocześnie, aby poprawić wydajność.

Powiedziano mi, że do systemu hostingu jeden kontener dokowy to tylko jeden proces. Zastanawiam się więc, w jaki sposób mój multi-proces będzie obsługiwany w Dockerze?

Poniżej są moje obawy:

  1. ponieważ pojemnik jest tylko jeden proces, będzie mój kod multi-proces stać wielowątkowości w tym procesie?

  2. Czy wydajność spadnie? Ponieważ powodem, dla którego używam wielu procesów, jest równoległe wykonywanie pracy, aby uzyskać lepszą wydajność.

Odpowiedz

4

Docker obejmuje przestrzeni nazw ID procesu oraz pełne wsparcie dla uruchamiania wielu procesy przez jądro. Wewnątrz kontenera możesz uruchomić ps, aby zobaczyć wyizolowaną listę procesów (która często będzie po prostu twoją powłoką i poleceniem ps).

Opis okna dokowanego do uruchamiania pojedynczej aplikacji polega na oddzieleniu technologii izolacji aplikacji od bardziej znanych narzędzi do wirtualizacji systemów operacyjnych, na których można uruchomić serwer WWW, serwer pocztowy, demona ssh itp. W tle.

Kilka słów uwaga:

  • Po pid 1 zjazdów, swoje końce kontenerów, niezależnie od tego, czy rozwidlone procesy są nadal działa, czy nie.
  • Bez init, zakończone procesy, które nie zostaną zebrane przez ich rodziców, pozostaną jako zombie (nie przekażą izolacji przestrzeni nazw, aby osiągnąć proces inicjowania hosta). Istnieje aplikacja tini, którą można uruchomić jako punkt początkowy, aby je wyczyścić, jeśli jest to problem (tini github repo).
+0

Próbuję zrozumieć twoje słowa. Oznacza to, że wielozadaniowość obsługuje dokowanie. Ale te procesy są izolowane przez przestrzeń nazw procesów, więc nie możemy ich zobaczyć poza kontenerem dokera, prawda? –

+0

Izolacja procesu oznacza, że ​​proces (y) wewnątrz kontenera nie może zobaczyć hosta, zobaczą tylko siebie działające. Ale host będzie mógł zobaczyć procesy uruchomione w kontenerze. 'docker run -it --rm busybox/bin/sh -c top', aby zobaczyć to w akcji. – BMitch

0

Tak patrz doc o przełożonym https://docs.docker.com/engine/admin/using_supervisord/

Można również użyć narzędzia demon http://cr.yp.to/daemontools.html

lub S6 http://skarnet.org/software/s6/

+0

Witam, bardzo dziękuję za informacje. Ale myślę, że twoja odpowiedź nie pasuje do mojego pytania. Być może wyjaśniłem pytanie. Ponownie zredagowałem moje pytanie. Czy możesz ponownie sprawdzić? –

+0

Wyodrębniam ze starego Docker PR https://github.com/docker/docker/issues/3090 this 'Tak, aplikacje uruchomione w kontenerach będą skalowane, aby wykorzystać rdzenie procesora tak, jakby były uruchomione poza kontenerem. ' – user2915097

+0

może zaistnieć potrzeba określenia w swoim' ruchu dokowania' ile jednostek CIP pozwalasz na użycie kontenera dokowanego, wyodrębnij z dokumentu https://docs.docker.com/engine/reference/run/ '--cpuset-cpus = "" \t Procesory, w których można wykonać wykonanie (0-3, 0,1) ' – user2915097

Powiązane problemy