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()
多线程与多进程同步
本文探讨了在Python中使用Event对象进行多线程和多进程间的同步问题,通过具体代码实例展示了如何正确地在处理系统信号的函数中使用threading模块的Event来避免卡死现象。
2370

被折叠的 条评论
为什么被折叠?



