Python——从线程转换为多处理,现在发布/订阅(Louie)不起作用
今天我将大多数线程实现切换到多处理,一切都很顺利——除了louie dispatcher消息。当然,这可能不是最新的发布/订阅模块,但我使用它是因为我已经将它用于python openzwave。我想这与无法跨进程发送消息有关。我的问题是,有没有办法和路易这样做?如果没有-是否有允许发布/订阅消息的模块?谢谢 编辑,被要求发布代码: 例如,下面是一个在后台持续运行并执行一些计算机/网络/安全检查的流程: 启动check类的调用:Python——从线程转换为多处理,现在发布/订阅(Louie)不起作用,python,multithreading,publish-subscribe,python-multiprocessing,Python,Multithreading,Publish Subscribe,Python Multiprocessing,今天我将大多数线程实现切换到多处理,一切都很顺利——除了louie dispatcher消息。当然,这可能不是最新的发布/订阅模块,但我使用它是因为我已经将它用于python openzwave。我想这与无法跨进程发送消息有关。我的问题是,有没有办法和路易这样做?如果没有-是否有允许发布/订阅消息的模块?谢谢 编辑,被要求发布代码: 例如,下面是一个在后台持续运行并执行一些计算机/网络/安全检查的流程: 启动check类的调用: _ = utilities.Environment() 环境类仅
_ = utilities.Environment()
环境类仅包含init和主函数:
class Environment(object):
def __init__(self):
self.logger = logging.getLogger(genConfig.LOGGER_NAME)
self.process = multiprocessing.Process(target=self.run_tests)
self.process.daemon = True
self.process.start()
def run_tests(self):
self.zwaveReceived = False
while True:
self.comp_test()
self.net_test()
self.server_test()
self.audio_test()
self.security_test()
self.ups_test()
self.zwave_test()
time.sleep(genConfig.SYS_CHECKS_INTERVAL)
在self.comp_test中,我从这里打印的最后一篇文章,知道它正在到达这里:
if compTest > 0:
wx.CallAfter(dispatcher.send, eventConfig.SYSCHK_LISTENER, orders=eventConfig.EVT_COMP_OFF)
else:
wx.CallAfter(dispatcher.send, eventConfig.SYSCHK_LISTENER, orders=eventConfig.EVT_COMP_ON)
及其中一名签署人:
dispatcher.connect(self.flip_sys_btns, eventConfig.SYSCHK_LISTENER)
就像我说的,我已经打印过了,我到了发布的地方,我没有到订阅方。当我使用线程时,代码运行良好,除了切换到多处理之外,没有任何变化。线程可以访问相同的内存空间,但进程不能,因此是的,您的程序现在的行为可能存在一些根本性的差异。你能发布代码吗?@figs代码发布,谢谢你的关注。使用多线程运行时,run\u tests线程将在类的同一实例上调用self.comp\u test,而使用多处理时,它将不是同一实例。这个答案可能会更清楚:。谢谢,我明天会测试一下。