Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python——从线程转换为多处理,现在发布/订阅(Louie)不起作用_Python_Multithreading_Publish Subscribe_Python Multiprocessing - Fatal编程技术网

Python——从线程转换为多处理,现在发布/订阅(Louie)不起作用

Python——从线程转换为多处理,现在发布/订阅(Louie)不起作用,python,multithreading,publish-subscribe,python-multiprocessing,Python,Multithreading,Publish Subscribe,Python Multiprocessing,今天我将大多数线程实现切换到多处理,一切都很顺利——除了louie dispatcher消息。当然,这可能不是最新的发布/订阅模块,但我使用它是因为我已经将它用于python openzwave。我想这与无法跨进程发送消息有关。我的问题是,有没有办法和路易这样做?如果没有-是否有允许发布/订阅消息的模块?谢谢 编辑,被要求发布代码: 例如,下面是一个在后台持续运行并执行一些计算机/网络/安全检查的流程: 启动check类的调用: _ = utilities.Environment() 环境类仅

今天我将大多数线程实现切换到多处理,一切都很顺利——除了louie dispatcher消息。当然,这可能不是最新的发布/订阅模块,但我使用它是因为我已经将它用于python openzwave。我想这与无法跨进程发送消息有关。我的问题是,有没有办法和路易这样做?如果没有-是否有允许发布/订阅消息的模块?谢谢

编辑,被要求发布代码:

例如,下面是一个在后台持续运行并执行一些计算机/网络/安全检查的流程:

启动check类的调用:

_ = 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,而使用多处理时,它将不是同一实例。这个答案可能会更清楚:。谢谢,我明天会测试一下。