Параллельная обработка элементов массива
У меня есть многопроцессорная программа. Каждый процесс берет число из data, а затем вставляет его в __queue_out.
Но есть проблема: когда начинается последний процесс, начинается бесконечный цикл и все процессы просто умирают
Например: Когда queue.get() == 10000, то программа убивает все процессы и остается бессмысленный бесконечный цикл
import time
import threading
import random
from queue import Queue, PriorityQueue
from multiprocessing import Pool, Process
data = range(1, 100001)
start = time.time()
end_date = time.time() - start
class Worker(Process):
counter = -1
def __init__(self, queue_in, queue_out):
super(Worker, self).__init__()
self._daemon = Process().daemon
# self.setDaemon(True)
self.__queue_in = queue_in
self.__queue_out = queue_out
def run(self):
while True:
job = self.__queue_in.get()
Worker.counter += 1
num = Worker.counter
print('Получил: ', self.name, job)
print('Выполнил: ', self.name, job)
self.__queue_out.put((num, job))
self.__queue_in.task_done()
queue = Queue()
res = PriorityQueue()
for i in data:
queue.put(i)
for i in range(1):
w = Worker(queue, res)
w.start()
queue.join()
out = []
while not res.empty():
out.append(res.get()[1])
print(out)
print(end_date)