Задать вопрос
@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()


Что не так то?
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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