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)
concurrent.futures.ProcessPoolExecutor. You can also use themultiprocessingmodule directly.