如果我犯了错误,请纠正我。
WSGI是Python基于Web应用程序的标准接口。但是据说WSGI的性质是同步的。因此,即使像Tornado
这样的东西也会同步地处理WSGI应用程序。这意味着,wsgi标准使python web应用程序同步。
我对异步程序的内部工作原理不是很了解。我知道的是,异步程序不会等待I/O
任务完成后再执行不涉及I/O
任务的其他任务。
如果我的理解是正确的,那么一个非常基本的处理wsgi应用程序的Python Web服务器将如下所示:
import socket
class Server(object):
def __init__(self, host, port, app):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind((host, port))
self.socket.listen(5)
self.app = app
def serve(self):
while True:
client, addr = self.socket.accept()
request = client.recv()
response_body = self.handle_app(request)
client.sendall(response_body)
client.close()
def handle_app(self, request):
# processing request stuff
environ = self.environ_logic() # some logics
start_response = self.start_response_logic() # some logics
return self.app(environ, start_response)
那么,什么使WSGI在本质上是同步的?通过那个例子,哪一部分使它不是异步
的?是否有可能创建一个能够异步处理WSGI应用程序的Web服务器(使用Python)?