gpt4 book ai didi

python - Python上的Pusher永远运行

转载 作者:行者123 更新时间:2023-12-03 12:09:22 25 4
gpt4 key购买 nike

我正在学习将websockets用于新项目。我想监视通过多个不同套接字连接发送的实时消息流。碰巧的是,其中一个套接字API使用Pusher。我喜欢在python中工作,所以我找到了the pusherclient pacakge on pypi。对于其他连接,我正在使用the websocket-client package

所以我的问题是,除了示例中的while True:循环之外,还有没有更好的方法可以让pusher客户端永久运行:

...
global pusher

# We can't subscribe until we've connected, so we use a callback handler
# to subscribe when able
def connect_handler(data):
channel = pusher.subscribe('mychannel')
channel.bind('myevent', callback)

pusher = pusherclient.Pusher(appkey)
pusher.connection.bind('pusher:connection_established', connect_handler)
pusher.connect()

while True:
# Do other things in the meantime here...
time.sleep(1)

这行得通,但似乎确实占用了CPU。使用 websocket-client包,在pypi页面上有一个示例,显示了如何永久运行客户端:
...
#omitted function definitions
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()

我测试了两种代码,它们都可以工作,但是websocket-client使用的CPU似乎比pusherclient少得多。由于我需要同时打开多个客户端,因此我确实想节省资源。我在想应该有一种比 while True循环更好,更漂亮,更便宜的方法来使套接字保持生命。有谁知道好的技术?

谢谢

最佳答案

默认情况下,Pusher客户端是一个守护进程,这意味着基础线程在后台运行,并且不会阻止python主线程关闭。

至少在较新的版本(例如:0.6.0b2)中,有一个称为daemon的初始化参数,可以将其设置为False,这样就不必离开while循环。

例子:

pusher = pusherclient.Pusher(appkey, daemon=False)
pusher.connection.bind('pusher:connection_established', connect_handler)
pusher.connect()

# No need for a while True as the underlying non-daemon thread will prevent the process
# from dying automatically.

关于python - Python上的Pusher永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820641/

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