Ephemient : каждый ребенок в вашем коде будет оставаться в цикле for после окончания его работы. Он будет раскошелиться снова и снова. Более того, дети, которые запускаются, когда children [] не пусто, будут пытаться дождаться некоторых своих братьев в конце цикла. В конце концов кто-то потерпит крах. Это обходной путь:
import os, time
def doTheJob(job):
for i in xrange(10):
print job, i
time.sleep(0.01*ord(os.urandom(1)))
# random.random() would be the same for each process
jobs = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
imTheFather = True
children = []
for job in jobs:
child = os.fork()
if child:
children.append(child)
else:
imTheFather = False
doTheJob(job)
break
# in the meanwhile
# ps aux|grep python|grep -v grep|wc -l == 11 == 10 children + the father
if imTheFather:
for child in children:
os.waitpid(child, 0)