Event
多线程多进程 间同步可以使用 Event
代码中是多线程, 使用 multiprocessing 的 Event,
在处理系统信号的函数中 event.set() 卡死,
换成 threading 的 Event 才对
# from multiprocessing import Event
from threading import Event
glogger = logging.getLogger('')
class ZService(object):
stop_event = Event()
def __init__(self, config = None):
super().__init__()
self.stop_event.clear()
def __del__(self):
self.stop()
def start(self):
glogger.info("zservice> start")
while not self.stop_event.is_set():
glogger.info('%s working', os.getpid())
self.stop_event.wait(0.3)
glogger.info('%s> stop' % os.getpid())
def stop(self):
self.stop_event.set()
glogger.info("zservice> set event")
gService = ZService()
def sigint_handler(signum, frame):
# global gService
glogger.warning("Handle SIGINT")
if gService:
glogger.warning("Do STOP SERVICE")
gService.stop()
if __name__ == '__main__':
signal.signal(signal.SIGINT, sigint_handler)
signal.signal(signal.SIGHUP, sigint_handler)
signal.signal(signal.SIGTERM, sigint_handler)
glogger.start()