У меня есть класс, который определяет очередь и запускает количество рабочих в фоновом режиме:
class WorkerMaster:
def __init__(self):
self.workers = []
def listen(self):
queue = Queue()
self.init_workers(queue)
while True:
data = fetchData() # Fetches data from somewhre
queue.put(data)
def init_workers(self, queue):
for i in range(5):
worker = Worker(queue)
self._workers.append(worker)
worker.daemon = True
worker.start()
Как вы можете видеть, Мастер в основном производитель. Он извлекает данные откуда-то и добавляет их в очередь.
Это метод запуска рабочего класса, который наследуется от Process:
def run(self):
try:
super().run()
while True:
data = self.queue.get()
self.process(data)
Проблема в том, что get () вызов блокируется, и когда я пытаюсь уничтожить основной процесс, сначала уничтожается очередь, а в дочернем процессе я получаю такие ошибки, как эта, потому что очередь не существует:
File "C:\python\python\3.7.1\lib\multiprocessing\queues.py", line 94, in get
res = self._recv_bytes()
File "C:\python\python\3.7.1\lib\multiprocessing\connection.py", line 216, in recv_bytes
buf = self._recv_bytes(maxlength)
File "C:\python\python\3.7.1\lib\multiprocessing\connection.py", line 306, in _recv_bytes
[ov.event], False, INFINITE)
Иэто останавливает основной процесс, не позволяя ему правильно завершиться. Как я могу решить проблему?