【发布时间】:2018-07-20 03:15:27
【问题描述】:
我正在寻找一种理解ioloop in tornado的方法,因为我多次阅读官方文档,但无法理解。具体来说,它为什么存在。
from tornado.concurrent import Future
from tornado.httpclient import AsyncHTTPClient
from tornado.ioloop import IOLoop
def async_fetch_future():
http_client = AsyncHTTPClient()
future = Future()
fetch_future = http_client.fetch(
"http://mock.kite.com/text")
fetch_future.add_done_callback(
lambda f: future.set_result(f.result()))
return future
response = IOLoop.current().run_sync(async_fetch_future)
# why get current IO of this thread? display IO, hard drive IO, or network IO?
print response.body
我知道什么是 IO,输入和输出,例如读取硬盘驱动器,在屏幕上显示图形,获取键盘输入。
根据定义,IOLoop.current() 返回此线程的当前 io 循环。
我的笔记本电脑上有很多 IO 设备运行这个 python 代码。这个IOLoop.current() 返回哪个 IO?我从来没有听说过javascript nodejs中的IO循环。
此外,如果我只想进行数据库查询、读取文件,我为什么要关心这个低级的事情?
【问题讨论】:
-
Tornado 的 IOLoop 与您笔记本电脑的设备无关。而是对打开的套接字和文件对象进行异步读写操作。
-
您必须阅读 Linux 中的
select函数才能更好地了解异步、非阻塞 I/O。所以,Tornado 的 IOLoop 只是为底层操作系统的 asyncselect或poll等函数提供了一个 API。请参阅此页面 - pymotw.com/3/select。该页面上的代码示例是关于在套接字上执行异步 I/O。因此,Tornado 的 IOLoop 已经处理了所有这些事情,并使用户更轻松。