Я действительно расстроен.Почему Python multiprocessing.apply_async () фактически не запускает процесс, когда объект очереди передается в качестве аргумента или части аргумента?
Этот код работает должным образом:
#! /usr/bin/env python3
import multiprocessing
import queue
import time
def worker(var):
while True:
print("Worker {}".format(var))
time.sleep(2)
pool = multiprocessing.Pool(20)
m = multiprocessing.Manager()
q = queue.Queue()
for i in range(20):
pool.apply_async(worker, (i,))
print("kicked off workers")
pool.close()
pool.join()
Но, просто пройдя очередь q
, при ее запуске ничего не происходит:
#! /usr/bin/env python3
import multiprocessing
import queue
import time
def worker(var,q):
while True:
print("Worker {}".format(var))
time.sleep(2)
pool = multiprocessing.Pool(20)
m = multiprocessing.Manager()
q = queue.Queue()
for i in range(20):
pool.apply_async(worker, (i,q))
print("kicked off workers")
pool.close()
pool.join()
Снова;супер расстраиваетЧто, черт возьми, происходит?Что я делаю не так?