在一个模块内共享状态的Pythonic方法是什么?

2024-04-19 14:38:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在代码中处理信号,并使用global在函数之间共享状态:

exit = False

def setup_handler():
  signal.signal(signal.SIGTERM, handler)

def handler(num, frame):
   global exit
   exit = True

def my_main():
   global exit
   while not exit:
      do_something()

if __name__ == '__main__':
   setup_handler()
   my_main()

在这种情况下,有没有避免全局变量的方法?在这种情况下,共享状态的最佳方式是什么?你知道吗


Tags: 函数代码falsesignal信号mainmy状态
1条回答
网友
1楼 · 发布于 2024-04-19 14:38:02

您可以使用类来封装全局模块,但是否值得这样做取决于您真正想要避免全局模块的程度。你知道吗

class EventLoop(object):
    def __init__(self):
        self.exit = False

    def run(self):
        while not self.exit:
            do_something()

    def handler(self):
        self.exit = True     

# It's up to you if you want an EventLoop instance
# as an argument, or just a reference to the instance's
# handler method.
def setup_handler(event_loop):
    signal.signal(signal.SIGTERM, event_loop.handler)


if __name__ == '__main__':
   loop = EventLoop()
   setup_handler(loop)
   loop.run()

相关问题 更多 >