django是单线程还是多线程,django是多线程还是多进程

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: