Python服务器编程

Python服务器编程IEEE公布的2017年编程语言排行榜,python高居首位。在百度指数上,python的搜索量也跻身到与java相等的量级,成为最火的语言之一。那么Python适合用来做服务器编程吗?首先,看看哪些公司在用Python作为服务器的主要技术栈?可以看到,其中不缺乏一些用户量…

IEEE公布的2017年编程语言排行榜,python高居首位。在百度指数上,python的搜索量也跻身到与java相等的量级,成为最火的语言之一。

Python服务器编程

那么Python适合用来做服务器编程吗?

Python服务器编程

首先,看看哪些公司在用Python作为服务器的主要技术栈?可以看到,其中不缺乏一些用户量庞大的公司。

Python服务器编程

得益于语言的简洁性,python很适合用来进行快速开发,编写出可读性强的程序。那么怎么用python来做服务器编程呢?

从一个例子说起…

Python服务器编程

这是一个简单的回显服务器,服务端每次从请求读取一些字节并返回给客户端。

Python服务器编程

但由于服务器是单进程的,如果一个请求占住了服务器,就没办法处理另一个请求。

Python服务器编程

这次做一些改动,每来一个请求就fork一个进程来处理,这样就不会出现之前的问题。

Python服务器编程

但多进程模型处理不好会出现僵尸进程和孤儿进程,因此父进程需要处理SIGCHILD信号来收集退出的子进程的信息。

Python服务器编程

socketserver模块中ForkingMixIn收集子进程的例子:

Python服务器编程

原始的CGI程序就是使用这种方式,对于每个请求都fork进程来解释cgi程序。

Python服务器编程

不过随着请求数量的变多,fork进程所带来的开销往往很大。

Python服务器编程

所以CGI不仅慢…

Python服务器编程

而且

Python服务器编程

甚至

Python服务器编程

后来出现了FastCGI,它与CGI的区别,就是更Fast(误),它是一个常驻进程,预先启动多个cgi进程来等待处理请求。

Python服务器编程

不同于FastCGI,Apache搞了一套mod_python,使得python解释器可以嵌入在apache进程。

Python服务器编程

后来PEP 333中定义了WSGI,成为沿用至今的Python web开发的标准协议。

Python服务器编程

应用WSGI协议的一个示例:

Python服务器编程

绝大部分的python web开发框架都遵守了这套标准:

Python服务器编程

gunicorn是一个著名的wsgi http服务器,它采用pre-fork模型来处理和转发请求。

Python服务器编程
Python服务器编程
Python服务器编程

gunicorn包含许多种worker模型:

Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程

抛开多进程,现在来看多线程的模型,该方案用线程代替进程来处理每一个请求:

Python服务器编程

但是为什么许多人说python的多线程是个鸡肋呢?看下面同样的代码,用同步的方式和多线程的方式执行,多线程的代码却执行的更慢…

Python服务器编程

这到底是什么回事?

Python服务器编程

这就要说到python中的GIL了,由于GIL的制约,多线程很难充分利用cpu的性能(原图引用

Python服务器编程

话虽如此,多线程在IO密集型应用上还是有不少用武之地的。下面是多线程在服务器编程的其中一些应用(原图引用

Actor模型

Python服务器编程
Python服务器编程

生产者-消费者

Python服务器编程
Python服务器编程
Python服务器编程

concurrent.future在PEP 3148中被定义,它提供了更简单的多进程/多线程API

Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程

在很长的一段时间,多进程/多线程的模型都应用的很好,但是

Python服务器编程
Python服务器编程

这时候更适合服务器编程的IO多路复用模型开始被广泛应用:

Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程

基于事件驱动的异步模型对服务器的资源的有效利用率显然易见

Python服务器编程

衍生了大量的异步网络框架

Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程

在Python 3.4后出现了专门处理异步IO的标准库asyncio

Python服务器编程
Python服务器编程
Python服务器编程
Python服务器编程

而在随后的Python 3.5后出现了协程语法糖async/await

Python服务器编程
Python服务器编程

虽然asyncio成为标准库,但它使用方法却较为复杂,不便于使用,也有人提议要asyncio提供更简洁的接口,也有不少的替代库出现

Python服务器编程
Python服务器编程

总的来说,服务器编程经历了从开始的简单到后来的复杂化最终慢慢演变到简单的方式上。

Python服务器编程
Python服务器编程

今天的文章Python服务器编程分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/19692.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注