我希望能找到一种方法来理解Tornado中的ioloop,因为我已经多次阅读了官方文档,但无法理解它的存在意义。
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 Node.js中的IO循环。此外,如果我只想进行数据库查询、读取文件,为什么要关心这个低级事情呢?
select
函数的内容,以更好地理解异步、非阻塞I/O。因此,Tornado的IOLoop只是提供了一个API来调用底层操作系统的异步select
或poll
等函数。请参见此页面-https://pymotw.com/3/select/。该页面上的代码示例是关于在套接字上执行异步I/O的。因此,Tornado的IOLoop已经处理了所有这些事情,并使用户更容易使用。 - xyres