Python - 从线程切换到多处理,现在发布/订阅(Louie)不起作用

时间:2015-04-10 03:27:20

标签: python multithreading publish-subscribe python-multiprocessing

我今天将大多数线程实现切换到多处理,一切都很顺利 - 除了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)

就像我说的那样,我已经打印过,我到达了发布的地方,我没有到达订阅方。当我使用线程时代码运行良好,除了切换到多处理之外没有任何改变。

0 个答案:

没有答案