gpt4 book ai didi

python - PubNub 和 Python 的 multiprocessing.Process 不兼容?

转载 作者:行者123 更新时间:2023-12-01 09:10:37 24 4
gpt4 key购买 nike

我正在尝试使用 Python 的 multiprocessing.Process 包(Raspbian 9 - Stretch 上的 Python 3.5)从进程内的 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()

最佳答案

PubNub 和 Python 多重处理

我无法让 SDK 在多处理工作线程中处理同步请求。然而,以下技巧非常有效:

同时使用多处理和 PubNub

简单的example.py文件包含以下代码:

import multiprocessing
import requests

SUB_KEY = 'demo'
CHANNELS = ['my_channel']

def main():
mp = multiprocessing.Process(target=subscriber)
mp.start()
mp.join()

def subscriber():
timetoken = '0' ## pointer to last message received
while True:
url = "/".join([
'https://ps.pubnub.com/subscribe'
, SUB_KEY
, ",".join(CHANNELS)
, '0'
, timetoken
])

print(url)

response = requests.get(url)
data = response.json()
messages = data[0]
timetoken = data[1]

print(data)

if __name__ == '__main__': main()

多处理子进程的输出

> python example.py 
https://ps.pubnub.com/subscribe/demo/my_channel/0/0
[[], u'15336927707090912']
https://ps.pubnub.com/subscribe/demo/my_channel/0/15336927707090912
[[{u'text': u'hey'}], u'15336927943808959']
https://ps.pubnub.com/subscribe/demo/my_channel/0/15336927943808959
[[{u'text': u'hey'}], u'15336927945476647']
https://ps.pubnub.com/subscribe/demo/my_channel/0/15336927945476647
[[{u'text': u'hey'}], u'15336927946996529']
https://ps.pubnub.com/subscribe/demo/my_channel/0/15336927946996529
[[{u'text': u'hey'}], u'15336927948441519']
https://ps.pubnub.com/subscribe/demo/my_channel/0/15336927948441519
[[{u'text': u'hey'}], u'15336927950007602']
https://ps.pubnub.com/subscribe/demo/my_channel/0/15336927950007602

关于python - PubNub 和 Python 的 multiprocessing.Process 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51687355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com