ваши процессы становятся зомби, потому что там задания завершены, но процессы не объединены.
Я воспроизвел вашу проблему с помощью этого единственного теста (я добавил сон для имитации длительных заданий):
import os
import time
from multiprocessing import Process
def _target(args):
print os.getpid(), os.getppid()
time.sleep(2)
print os.getpid(), "will stop"
if __name__ == '__main__':
args = "Foo"
for i in xrange(3):
p = Process(target=_target, args=(args,))
p.start()
import time
time.sleep(10)
при выполнении этого после того, как 3 процесса напечатали, что они остановятся, они станут в представлении ps (они больше не двигаются, но на самом деле не мертвы, потому что отец все еще держит их).
Если я заменю основную часть этим, у меня больше нет зомби:
if __name__ == '__main__':
args = "Foo"
processes = []
for i in xrange(3):
p = Process(target=_target, args=(args,))
processes.append(p)
p.start()
for p in processes:
p.join()
import time
time.sleep(10)