【问题标题】:why tornado TCPClient.connect return a Future object?为什么 tornado TCPClient.connect 返回一个 Future 对象?
【发布时间】:2016-05-18 08:13:30
【问题描述】:

在官方文档中说:

class tornado.tcpclient.TCPClient(resolver=None, io_loop=None)

connect(host, port, af=<AddressFamily.AF_UNSPEC: 0>, ssl_options=None, max_buffer_size=None)

异步返回一个IOStream

但是

import tornado.gen
import tornado.tcpclient
import tornado.ioloop
@tornado.gen.coroutine
def main():
    return tornado.tcpclient.TCPClient.connect('127.0.0.1', '8888')
result = tornado.ioloop.IOLoop.instance().run_sync(main)

我以为结果是一个 IOStream 对象,其实它是一个 Future 对象。

那么,为什么它不是 IOStream 对象?

【问题讨论】:

  • 因为它异步返回 IOStream
  • 如果我想获得 IOStream 应该怎么做?

标签: python tornado


【解决方案1】:

文件http://www.tornadoweb.org/en/stable/tcpclient.html 说: 异步返回一个 IOStream(如果 ssl_options 不是 None,则返回 SSLIOStream)。

在 tornado 中,异步方法返回未来对象。

【讨论】:

  • 所以无法获取IOStream?
  • 您可以通过yield 获取IOStream。并使用raise tornado.gen.Return() 将其退回。请参阅:使用异步时,您需要换一种思路。
  • 非常感谢。在龙卷风中,我似乎需要学习很多东西。
猜你喜欢
  • 1970-01-01
  • 2019-05-22
  • 2017-11-11
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多