I have a multiprocessor program. Each process takes a number from data
, and then inserts it into__queue_out
.
But there is a problem: When the last process starts, an endless cycle begins and all the processes just die
import time
import threading
import random
from queue import Queue, PriorityQueue
from multiprocessing import Pool, Process
data = range(1, 1001)
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('Take: ', self.name, job)
print('Complete: ', 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)