2015-05-10 2 views
-1

почему, когда я создаю процесс, и у меня есть n дети в состоянии зомби-состояния python присоединяются к ним?Почему python объединяет процессы зомби при запуске нового?

In [1]: def quick_process(): 
...:  pass 
...: 
In [2]: import multiprocessing 
In [3]: import time 
In [4]: for i in range(5): 
...:  multiprocessing.Process(target=quick_process).start() 
...:  time.sleep(1) 
...: 
In [5]: import os 
In [6]: while True: 
...:  try: 
...:   pid, status = os.waitpid(-1, 0) 
...:   print(pid, status) 
...:  except ChildProcessError: 
...:   break 
...:  
5767 0 

time.sleep(1) заявление для убедившись, что процесс находится в состоянии зомби, когда я цикл снова, ничего больше. так как вы видите, что осталось только один ребенок, когда выполняется while. в этом примере n = 1, но с большим значением это также происходит. почему python это делает? не следует ли я явно присоединяться к этим процессам? может ли кто-нибудь сказать мне, что здесь происходит? спасибо

+0

Почему не следует многопроцессорно ждать детей? Это интерфейс высокого уровня, и пользователю не следует беспокоиться о низкоуровневых материалах. – Daniel

+0

Я не думаю, что ваши процессы вообще зомби; напротив. Чтобы они были зомби, замените '' pass'' чем-то вроде '' while True: pass''. –

+0

, потому что мне нужно что-то делать с этими детьми, когда я присоединяюсь к ним, и, начав новые процессы, я не заметил бы, когда они закончат – dcg

ответ

0

Python не присоединяется к процессам. Выполняются процессы, когда выполняется quick_process. Вы можете по-прежнему join обрабатывать процессы, которые немедленно возвращаются, если процесс уже завершен. Пример:

import multiprocessing 

def quick_process(): 
    pass 

processes = [] 
for _ in range(5): 
    p = multiprocessing.Process(target=quick_process) 
    p.start() 
    processes.append(p) 

for p in processes: 
    p.join() # returns when the process terminates 
Смежные вопросы