Python - 等待变量变化

问题描述 投票:8回答:2

我有一个Python脚本,可以打开一个websocket到Twitter API,然后等待。当一个事件通过amq传递给脚本时,我需要打开一个新的websocket连接并 马上 当新的连接注册完成后,立即关闭旧的连接。

它看起来像这样。

stream = TwitterStream()
stream.start()

for message in broker.listen():
    if message:
        new_stream = TwitterStream()
        # need to close the old connection as soon as the 
        # new one connects here somehow
        stream = new_stream()

我想知道如何建立一个 "回调",以便在新连接建立时通知我的脚本。TwitterStream类有一个 "is_running "的布尔变量,我可以引用它,所以我想也许可以用这样的方法。

while not new_stream.is_running:
    time.sleep(1)

但这看起来有点乱 有谁知道更好的方法来实现这个目标吗?

python callback twitter websocket
2个回答
9
投票

忙碌的循环不是正确的方法,因为它显然会浪费CPU。有一些线程结构可以让你传达这样的事件。例如,请看 http:/docs.python.orglibrarythreading.html#event-objects


0
投票

下面是一个带有线程事件的例子。

import threading
from time import sleep

evt = threading.Event()
result = None
def background_task(): 
    global result
    print("start")
    result = "Started"
    sleep(5)
    print("stop")
    result = "Finished"
    evt.set()
t = threading.Thread(target=background_task)
t.start()
# optional timeout
timeout=3
evt.wait(timeout=timeout)
print(result)
© www.soinside.com 2019 - 2024. All rights reserved.