什么是python中的异步I / O?

时间:2012-10-08 10:25:09

标签: python multithreading asynchronous

很抱歉这个愚蠢的初学者问题,但我有一个真正的问题理解异步I / O的概念,我不谈论回调和其他复杂的东西,我只是想了解“如何python执行代码的开始“

所以这是我想用

理解的例子
class Foo()
    take a user input # line 1
    seek for this input from the database # line 2
    make some operation using the database output # line 3
    make an output to the client and show the message to the page # line 4

因此,如果用户将使用Tornado,如果他在服务器上执行代码,则假设我们有 4个客户端请求url与类{{1}匹配的页面那么,Python将如何执行代码;

即;在python中,因为它是Foo语言,那么每一行都在执行并返回值?所以它执行用户1 第1行,然后停止,并为第1行提供服务客户端2 以及其他客户端等等,然后跳到第2行,依此类推?

2 个答案:

答案 0 :(得分:2)

问题与python有很多关系。这是一个关于异步python框架(即龙卷风)的问题。

龙卷风中的客户端是异步处理的。这意味着当服务器处理客户端请求并命中执行某些异步操作的行时(示例中的数据库查询 - 第2行),它会在那里中断执行并切换到另一个客户端。当数据库查询完成后,关于它的通知进入队列,客户端等待轮到他从停止的点再次执行(第3行)。

Tornado拥有自己的客户执行模式。它被称为reactor pattern。基本上它意味着它循环遍历客户端队列并在需要时处理它们(即请求通过套接字,数据库查询完成)。

这种非阻塞循环是通过操作系统的实用程序完成的,如Epoll

答案 1 :(得分:1)

我认为你的问题更多地与python处理multithreading的方式有关。

虽然解释器永远不会使用处理器的多个核心(一些信息herehere),但它支持多线程,因为不同的线程可以被执行而其他线程正在等待{{ 1}}。在上面的示例中, client1 第1行)可以在 client1 等待数据库调用时提供(第2行)返回。

关于“因为它是一种脚本语言,那么每一行都在执行并返回值?”,不,我想不出那样的东西; You can use generators执行“为每行返回值”之类的操作,但我想这不是您要查找的内容。