给定一个url列表如何使用twisted python异步返回来自生成器的url内容

时间:2017-03-02 14:15:43

标签: python-2.7 asynchronous twisted

我想知道如何使用python中的twisted来异步返回url列表的内容。我知道我可以使用getPage()来异步获取url内容但是如何使用生成器的yield的结果来返回生成器函数的结果。

同步代码看起来像这样

import requests
def gen(urls):
    for url in urls:
        yield requests.get(url)

修改1:

我的具体要求是通过flask python提供服务。也就是说,给定一个关键字我的烧瓶应用程序应该返回与该关键字相关的所有网址的内容。我可以使用搜索引擎api从关键字获取网址列表,我所要做的就是使用服务器发送的事件(事件源)作为流媒体服务返回内容。

def handle_request():
    urls=search_engine.search(requests.args.get('query'))
    def content_gen():
        for url in urls:
            yield requests.get(url)
    return Response(content_gen(), mimetype="text/event-stream")

requests.get调用是同步的,我想要的是通过使用为我的烧瓶应用程序加入的getPage()使代码异步

编辑2:

在所有网址上使用Twisted的getPage我将获得一个延迟列表。 Flask是一个同步框架,所以我不能直接使用deferreds通过Flask返回数据。通过使用钩子库我可以同步等待延迟,因为等待延迟是在钩子中使用@ wait.for装饰器阻塞,结果按顺序返回。但是我希望生成器函数能够生成url的数据,而不是跟随url序列。

老实说,我不太了解钩针或扭曲,所以如果我问一个小问题,请原谅。

0 个答案:

没有答案