work = manager.Queue(num_workers)
pool = []
for i in range(num_workers):
    p = Process(target=do_work, args=(work, results))
p.start()
pool.append(p)
iters = itertools.chain(get_work_args(), (None,) * num_workers)
for item in iters:
    work.put(item)
for p in pool:
    p.join()
print(results)
Многопроцессорность в Python при ограничении количества запущенных процессов