Задать вопрос
@Tiasar
Web Developer

Почему python скрипт блокируется/зависает при установки события (Event) в true для multiprocessing?

Начал было переписывать парсер с многопоточности в мультипроцессорность, споткнулся.

Код должен изящно останавливаться по команде sigterm, но он этого не делает, если Event класс берется из multiprocessing

В консоль печатается "Stop command was arrived" и при этом скрипт не завершается. Вот порезанный но демонстрирующий это кусок говнокода

import signal
import multiprocessing

class MainProcess(object):

    def __init__(self):
        signal.signal(signal.SIGTERM, self.stop)
        signal.signal(signal.SIGINT, self.stop)
        self._event_stop = multiprocessing.Event()

    def start(self):
        print("Parser started")
        self._event_stop.wait()
        print("Parser stopped")
        exit(0)

    def stop(self, signum, frame):
        if not self._event_stop.is_set():
            print("Stop command was arrived")
            self._event_stop.set()

if __name__ == "__main__":
    MainProcess().start()


Заменив multiprocessing на threading все работает так как и предполагалось, появляется принт
Stop command was arrived
Parser stopped

import signal
import threading

class MainProcess(object):

    def __init__(self):
        signal.signal(signal.SIGTERM, self.stop)
        signal.signal(signal.SIGINT, self.stop)
        self._event_stop = threading.Event()

    def start(self):
        print("Parser started")
        self._event_stop.wait()
        print("Parser stopped")
        exit(0)

    def stop(self, signum, frame):
        if not self._event_stop.is_set():
            print("Stop command was arrived")
            self._event_stop.set()

if __name__ == "__main__":
    MainProcess().start()


Что не так то?
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы