我在 QT 应用程序中使用来自请求模块的生成器函数,与请求流示例中的几乎相同:

import json
import requests

def get_stream():
    r = requests.get('http://httpbin.org/stream/20', stream=True)
    for line in r.iter_lines():
        if line:
            yield json.loads(line)

def consume_stream():
    for message in get_stream():
       #do something

但是,当没有传入响应(例如来自 Twitters Streaming API 的不规则传入推文)时,生成器 get_stream 将阻止 consume_stream 方法。

这可能发生在任何情况下,生成器不会立即让步,而是必须等待传入的消息等,因此会阻塞消费者。

Python中是否有任何模式可以以非阻塞方式使用生成器,即如果生成器产生,则处理它的结果,否则做其他事情直到下一个结果出现?

最佳答案

看看 producer-consumer pattern 。它通常使用 Queue 在 python 中实现。

生产者,通常在一个线程或另一个进程中运行(Queue 支持),只是将消息放入队列中。消费者,只要有感觉,就会从队列中弹出消息。此操作支持 timeout 参数。

关于python - Python 上的非阻塞生成器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19736463/

10-13 07:04