django是单线程还是多线程,django是多线程还是多进程
在一段完整的代码中,往往有需要独立的代码模块,这些独立运行的程序段称为“线程”。用多线程编程的概念叫做多线程处理(多线程编程)。多线程的目的是同时完成多个任务,不是为了提高运行效率,而是为了提高资源使用效率和系统效率。当一个程序需要同时完成多个任务时,就实现了多线程。多线程的目的只是为了提高资源利用的效率。每个线程执行自己的任务,这些线程可以“同时进行”。同时也不是同时进行,而是在一定的时间内,完成所有的任务,任务按顺序运行。
简单地说,服务器监听套接字,每当它接受一个新请求时,它就打开一个线程来处理套接字客户机连接。如果您对底层实现原理感兴趣,可以从套接字编程的角度阅读并解释多线程wsgi服务器。最后附上一个异步框架工作过程的视频说明。在这里,我们先来看看一个简单的多线程wsgi服务器的原理,还是需要深入到源代码和socket编程中,才能真正理解。让我们看看如何实现来自python自带的wsgi服务器的请求的多线程处理。首先,您需要熟悉wsgi。看看最简单的wsgi应用程序:
默认应用程序(环境,启动响应):
状态= 200正常
头=[(Content-Type , text/html;charset=utf8)]
start_response(状态,标题)
如果__name__==__main__:则返回[b h1 hello/h1 ]
fromwsgirif . simple _ server import make _ server
httpd=make_server(127.0.0.1 ,8000,应用程序)
Httpd.serve_forever()然后用你的开发工具跟着make_server函数看一下它的定义:
defmake_server(
主机,端口,app,server_class=WSGIServer,handler _ class=WSGIRequestHandler):
createanewwsgiserverlistening on ` host `和` port`for`app `
server=server_class((主机,端口),handler_class)
server.set_app(应用程序)
returnserverclassswsgiserver(http server):
basehttpserverthatimplementthepythonwsgi protocol
应用程序=无
defserver_bind(self):
“”覆盖用户
ver_bindtostoretheservername."""
HTTPServer.server_bind(self)
self.setup_environ()
defsetup_environ(self):
#Setupbaseenvironment
env=self.base_environ={}
env['SERVER_NAME']=self.server_name
env['GATEWAY_INTERFACE']='CGI/1.1'
env['SERVER_PORT']=str(self.server_port)
env['REMOTE_HOST']=''
env['CONTENT_LENGTH']=''
env['SCRIPT_NAME']=''
defget_app(self):
returnself.applicationdefset_app(self,application):
self.application=application看到这个 WSGIServer 定义了吗,继承了一个 HttpServer。我们再继续追一下其定义:
classHTTPServer(SocketServer.TCPServer):
到这里,我们继续追,看到 TcpServer 定义:
classTCPServer(BaseServer):
你还可以发现一个 ThreadingTCPServer 类:我们看下它的定义
classThreadingTCPServer(ThreadingMixIn,TCPServer):
好了,怎么多线程处理请求呢?看下这个 ThreadingMixIn 类是如何实现的:
classThreadingMixIn:
看到吗,其实就是对于每个新请求,会启动一个新的线程来处理 socket 请求。假如让我们自己实现一个多线程 socket server 应该怎么实现呢?先来写一个简单的单线程 socker echo server:
fromsocketimport*#偷懒这么写s=socket(AF_INET,SOCK_STREAM)s.bind(("",9000))s.listen(5)whileTrue:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。