2

很抱歉这个愚蠢的初学者问题,但我在理解异步 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 与 class 匹配的页面Foo,那么 Python 将如何执行代码;

IE; 在python中,既然它是一种Script语言,那么每一行都在执行并返回值?那么它是否为用户 1执行第1 行,然后停止,并为客户端 2等其他客户端提供第1 行,然后跳到第2 行,依此类推?

4

2 回答 2

2

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

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

Tornado 有自己的客户执行模式。它被称为反应器模式。基本上,这意味着它正在遍历客户端队列并在需要时处理它们(即请求来自套接字,数据库查询已完成)。

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

于 2012-10-08T10:37:46.007 回答
1

我认为您的问题与 python 处理的方式有关multithreading

尽管解释器永远不会使用处理器的多个内核(此处此处的一些信息),但它支持多线程,因为可以在其他线程等待时执行不同的线程I/O。在上面的示例中,可以在client1等待数据库调用(line #2)返回时为client2line #1 )提供服务。

关于“既然是脚本语言,那么每一行都在执行并返回值?” ,不,我想不出那样的事情;您可以使用生成器来执行“为每一行返回值”之类的操作,但我想这不是您想要的。

于 2012-10-08T11:15:46.413 回答