我今天将大多数线程实现切换到多处理,一切都很顺利 - 除了louie调度程序消息。当然,这可能不是最新的发布/订阅模块,但是我使用它是因为我已经将它与python-openzwave一起使用了。我想这与无法跨进程发送的消息有关。我的问题是,有没有办法用louie做到这一点?如果没有 - 是否有允许它的发布/订阅消息模块?感谢。
EDIT,被要求发布代码:
例如,这是一个在后台持续运行并执行一些计算机/网络/安全检查的过程:
启动支票类的调用:
_ = utilities.Environment()
环境类(只是init和main函数):
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)
就像我说的那样,我已经打印过,我到达了发布的地方,我没有到达订阅方。当我使用线程时代码运行良好,除了切换到多处理之外没有任何改变。