Начал было переписывать парсер с многопоточности в мультипроцессорность, споткнулся.
Код должен изящно останавливаться по команде 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()
Что не так то?