当前位置: 首页 > 面试题库 >

无法在龙卷风上调用result()

袁致远
2023-03-14
问题内容

我想使用python库龙卷风(版本4.2)进行一些html" target="_blank">异步HTTP请求。但是,result()由于出现异常:我无法强迫将来完成(使用),因为“
DummyFuture不支持阻止结果”。

我有python 3.4.3,因此将来的支持应该成为标准库的一部分。的文档concurrent.py说:

concurrent.futures.Future如果有龙卷风,将使用。否则,它将使用此模块中定义的兼容类。

下面提供了我尝试做的一个最小示例:

from tornado.httpclient import AsyncHTTPClient;

future = AsyncHTTPClient().fetch("http://google.com")
future.result()

如果我正确理解我的问题,则会发生此问题,因为concurrent.futures.Future未使用某种方式的导入。龙卷风中的相关代码似乎在其中,concurrent.py但是我在理解问题的根源方面并没有真正取得进展。


问题答案:

尝试创建另一个Future并使用add_done_callback

从龙卷风文档

from tornado.concurrent import Future

def async_fetch_future(url):
    http_client = AsyncHTTPClient()
    my_future = Future()
    fetch_future = http_client.fetch(url)
    fetch_future.add_done_callback(
        lambda f: my_future.set_result(f.result()))
    return my_future

但是您仍然需要 使用ioloop解决未来 ,例如:

# -*- coding: utf-8 -*-
from tornado.concurrent import Future
from tornado.httpclient import AsyncHTTPClient
from tornado.ioloop import IOLoop


def async_fetch_future():
    http_client = AsyncHTTPClient()
    my_future = Future()
    fetch_future = http_client.fetch('http://www.google.com')
    fetch_future.add_done_callback(
        lambda f: my_future.set_result(f.result()))
    return my_future

response = IOLoop.current().run_sync(async_fetch_future)

print(response.body)

另一种方法是使用tornado.gen.coroutine装饰器,如下所示:

# -*- coding: utf-8 -*-
from tornado.gen import coroutine
from tornado.httpclient import AsyncHTTPClient
from tornado.ioloop import IOLoop


@coroutine
def async_fetch_future():
    http_client = AsyncHTTPClient()
    fetch_result = yield http_client.fetch('http://www.google.com')
    return fetch_result

result = IOLoop.current().run_sync(async_fetch_future)

print(result.body)

coroutine装饰器使函数返回Future



 类似资料:
  • 我已经建立一个网站一段时间了,我仍然坚持那件事: 我在dbm数据库中为我的网站存储了一些小视频(最多大约400MB),我想在我的网站上播放它们。 我正在使用Tornado python框架手工构建请求处理程序,我想知道如何构建我的处理程序。我从未发现媒体流是如何工作的,也没有在网上找到很多话题。 所以我想要实现的完整结果是在我的网站上有一个网络播放器,在那里我可以请求特定的视频,然后播放它们,而不

  • 如何获得我的python龙卷风模块版本的当前版本? 与其他软件包,我可以做到以下几点: 来源:如何检查python模块的版本?

  • 我设法编写了一个相当愚蠢的bug,它会使我的一个请求处理程序运行一个非常慢的DB查询。 有趣的是,我注意到,即使在围攻完成很久之后,龙卷风仍然在翻腾请求(有时是90年代以后)。(评论-->我不是100%确定围攻的工作原理,但我相当肯定它关闭了连接..) 我通读了代码,似乎什么也找不到。尽管我的请求处理程序在上面的bug中异步运行,但挂起的请求数量堆积到了一个降低应用程序速度的水平,关闭连接会更好。

  • 问题内容: 我想用Tornado运行一个用Flask编写的简单应用程序。我该怎么做呢?我想使用Python 2.7和最新的Tornado版本(4.2)。 问题答案: Flask文档用于描述如何执行此操作,但是由于以下性能说明而已被删除。除非所有异步代码都已经用Tornado编写,否则您不需要Tornado来提供Flask应用程序。 关于WSGI的Tornado文档也对此进行了描述。它们还包括一个重

  • 我创建了龙卷风服务器,它接受python和matlab代码并执行它。这是服务器代码。 我用来访问的客户代码是,这里 我关心的是保持执行的顺序,这样python代码只有在matlab完成后才能执行。我使用jupyter_client来执行matlab/python代码。我在这里使用python27。问题是当我提交代码时,它抛出< code > type error:' NoneType ' obje

  • 问题内容: 我有一个基本的Tornado websocket测试: 我希望能够处理多个连接(似乎已经做到了),而且还能够引用其他连接。我没有一种方法来识别和跟踪单个连接,只是为了能够处理打开连接,接收消息和关闭连接时的事件。 [编辑] 想创建一个dict,其中键是Sec-websocket-key,值是WSHandler对象…。我不确定Sec-websocket-key的可靠性如何。 问题答案: