Python переключился с Threading на Multiprocessing, теперь публикация/подписка (Луи) не работает

Сегодня я переключил большинство своих реализаций потоков на многопроцессорность, и все прошло отлично, за исключением сообщений диспетчера louie. Конечно, это, вероятно, не последний модуль публикации/подписки, но я использую его, потому что мне уже приходится использовать его с python-openzwave. Я предполагаю, что это как-то связано с невозможностью отправки сообщений между процессами. Мой вопрос в том, есть ли способ сделать это с louie? Если нет -- есть ли модуль сообщений публикации/подписки, который позволяет это делать? Спасибо.

РЕДАКТИРОВАТЬ, было предложено опубликовать код:

Например, вот процесс, который постоянно работает в фоновом режиме и выполняет некоторые проверки компьютера/сети/безопасности:

Вызов для запуска класса проверки:

_ = utilities.Environment()

Класс среды (только инициализация и основная функция):

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)

Как я уже сказал, я прошел через печать и дошел до того места, где производится публикация, я не дошел до стороны подписчика. Код работал хорошо, когда я использовал потоки, ничего не изменилось, кроме того, что я переключился на многопроцессорность.


person linus72982    schedule 10.04.2015    source источник
comment
Потоки могут обращаться к одному и тому же пространству памяти, а процессы — нет, так что да, теперь могут быть некоторые фундаментальные различия в том, как ведет себя ваша программа. Можете ли вы опубликовать код?   -  person all or None    schedule 10.04.2015
comment
Код @figs опубликован, спасибо за внимание.   -  person linus72982    schedule 10.04.2015
comment
При многопоточности поток run_tests будет вызывать self.comp_test в том же экземпляре вашего класса, при многопроцессорности это не будет тот же самый экземпляр. Этот ответ может прояснить ситуацию: stackoverflow.com/a/29317364/1470749.   -  person all or None    schedule 10.04.2015
comment
Спасибо, я проверю это завтра.   -  person linus72982    schedule 10.04.2015