Asynchronous 异步任务如何表示它们';关于;“完成”;如果有';有一根线吗?

Asynchronous 异步任务如何表示它们';关于;“完成”;如果有';有一根线吗?,asynchronous,tornado,python-asyncio,concurrent.futures,ioloop,Asynchronous,Tornado,Python Asyncio,Concurrent.futures,Ioloop,我用Tornado和asyncio编写了异步程序,但是我意识到我不明白异步任务是如何完成的 例如,让我们来看看异步获取。 到目前为止,我的理解是: 当fetch生成一个Future时,处理程序将挂起 Future通过 Future完成,而IOLoop计划重新激活协同程序,以便它能够完成 我不明白的是,第3步中的Future是如何“完成”并调用它的。我以为只有一个线程,那么未来的如何在后台工作并获得控制权以便调用回调呢?IOLoop会打开一个到远程服务器的套接字,然后将该套接字添加到文件描述符列表

我用Tornado和asyncio编写了异步程序,但是我意识到我不明白异步任务是如何完成的

例如,让我们来看看异步获取。

到目前为止,我的理解是:

  • fetch
    生成一个
    Future
    时,处理程序将挂起
  • Future
    通过
  • Future
    完成,而
    IOLoop
    计划重新激活协同程序,以便它能够完成

  • 我不明白的是,第3步中的
    Future
    是如何“完成”并调用它的。我以为只有一个线程,那么未来的
    如何在后台工作并获得控制权以便调用回调呢?

    IOLoop会打开一个到远程服务器的套接字,然后将该套接字添加到文件描述符列表中,在该列表中它正在等待IO使用或类似的系统调用

    每当循环不执行代码时——例如,当处理程序被
    yield
    暂停时,循环将等待IO,如下所示:

    当它接收到IO事件时(例如,当远程服务器发送一些响应字节时),Tornado会找到等待该事件的回调并执行它

    有关事件循环的示例实现,请参见