У меня есть простая задача:
def worker(queue):
while True:
try:
_ = queue.get_nowait()
except Queue.Empty:
break
if __name__ == '__main__':
manager = multiprocessing.Manager()
# queue = multiprocessing.Queue()
queue = manager.Queue()
for i in range(5):
queue.put(i)
processes = []
for i in range(2):
proc = multiprocessing.Process(target=worker, args=(queue,))
processes.append(proc)
proc.start()
for proc in processes:
proc.join()
Кажется, что multiprocessing.Queue может выполнять всю работу, которая мне нужна, но, с другой стороны, я вижу много примеров manager(). Queue() и не может понять, что мне действительно нужно. Похоже, Manager(). Queue() использует какие-то прокси-объекты, но я не понимаю их цели, потому что multiprocessing.Queue() выполняет ту же работу без каких-либо прокси-объектов.
Итак, мои вопросы:
1) Какая разница между многопроцессорностью .Queue и объектом, возвращаемым multiprocessing.manager(). Queue()?
2) Что мне нужно использовать?