【发布时间】:2018-08-04 16:04:45
【问题描述】:
我正在尝试使用 Python 的 multiprocessing.Process 包(Raspbian 9 上的 Python 3.5 - Stretch)在进程内接收来自 PubNub 的消息。
以下代码可以作为独立程序完美运行,也可以在使用 Python 线程包的线程中完美运行。但是,它不适用于 multiprocessing.Process。
是我遗漏了什么还是 PubNub 的 SubscribeListener 与 Python 的多处理包不兼容?
#!/usr/bin/env python3
from pubnub.pubnub import PubNub, SubscribeListener
from pubnub.pnconfiguration import PNConfiguration
import multiprocessing
import time
def PN_func():
pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'sub-mykey'
pubnub = PubNub(pnconfig)
print('Pubnub multiprocess subscriber initiated...')
class Listener(SubscribeListener):
def message(self, pubnub, data):
print("From Multiprocess function message: ", data.message)
pubnub.add_listener(Listener())
pubnub.subscribe().channels('my_channel').execute()
if __name__ == '__main__':
mp = multiprocessing.Process(target=PN_func)
mp.start()
mp.join()
【问题讨论】:
-
你能比不起作用更具体吗?您收到错误消息吗?您期望什么行为以及您看到什么行为?
-
@BoarGules 我有一个单独的程序,它每四秒生成一条消息。如果我在线程或独立进程下运行上述(当然使用我的个人子密钥),我会收到我的启动打印消息,然后每四秒打印一次消息。以上只是将我的启动消息打印到终端“Pubnub 多进程订阅者启动...”,然后程序终止返回 Linux shell 提示符。没有出现错误信息。
-
@FarNorth 我测试了你的代码,确实是的,它在使用多处理时退出。但是,在没有 Multiprocessing 的情况下运行时它不存在。
-
添加的答案应该可以很好地满足您的需求。如果缺少任何内容,请告诉我,我们可以添加更多详细信息。
标签: python python-multiprocessing pubnub