HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码
范围 | 描述 | |
---|---|---|
1XX | 100-101 | 信息提示 |
2XX | 200-206 | 成功 |
3XX | 300-305 | 重定向 |
4XX | 400-415 | 客户端错误 |
5XX | 500-505 | 服务器错误 |
生活心情
SELinux 模式
SELinux 拥有三个基本的操作模式,当中 Enforcing 是缺省的模式。此外,它还有一个 targeted 或 mls 的修饰语。这管制 SELinux 规则的应用有多广泛,当中 targeted
是较宽松的级别。
一般将coroutine称之为协程(或微线程,也有称纤程的)。
我在python并发编程那篇文章已经详细讲解了进程Process和线程Thread的用法,
很早就想再写一篇专门讲解coroutine以及相关的优秀库gevent。
目前常见的coroutine应用都是网络程序中,所以我们先来看看各种不同的网络框架模型,
然后再介绍coroutine就会比较理解了。
Web应用开发可以说是目前软件开发中最重要的部分。Web开发也经历了好几个阶段:静态Web页面、CGI、ASP/JSP/PHP、MVC。
目前,Web开发技术仍在快速发展中,异步开发、新的MVVM前端技术层出不穷。
Python的诞生历史比Web还要早,由于Python是一种解释型的脚本语言,开发效率高,所以非常适合用来做Web开发。
Python有上百种Web开发框架,有很多成熟的模板技术,选择Python开发Web应用,不但开发效率高,而且运行速度快。
自从互联网诞生以来,现在基本上所有的程序都是网络程序。
网络编程对所有开发语言都是一样的,Python也不例外。
用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。
本章我们将详细介绍Python网络编程的概念和最主要的两种网络类型的编程。
操作数据库是最常见的任务,这里用MySQL来做演示,也是我们用的最多的一个开源数据库,其他都类似的。
对于安装MySQL就不做介绍了,安装完后,还需要安装去驱动。因为需要支持Python的MySQL驱动来连接到MySQL服务器。
MySQL的驱动有多种实现,比如纯python实现的pymysql和mysql-connector,或者mysql-python也就是MySQLdb。
这里我通过mysql-connector来介绍使用方法:1
pip install mysql-connector
我们演示如何连接到MySQL服务器的test数据库:
单元测试在所有编程语言中都不陌生,对于一个健壮的软件来讲单元测试是很有必要的,
并且“测试驱动开发”(TDD:Test-Driven Development)越来越受欢迎也说明了它的重要性。
单元测试一个最大的好处,就是确保一个程序模块的行为符合我们设计的测试用例。
在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。
由于CPU的速度远远快于磁盘、网络等IO,我们可选择使用多进程或多线程来并发执行代码。
然而系统不能无限制增加线程,而且切换线程开销也大,一旦线程数量过多,CPU花的时间主要在切换线程上,导致性能下降。
另外一种解决方案是异步IO,当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。
一段时间后,当IO返回结果时,再通知CPU进行处理。
异步IO模型需要一个消息循环,在消息循环中,主线程不断地重复“读取消息-处理消息”这一过程:1
2
3
4loop = get_event_loop()
while True:
event = loop.get_event()
process_event(event
息模型是如何解决同步IO必须等待IO操作这一问题的呢?当遇到IO操作时,代码只负责发出IO请求,不等待IO结果,
然后直接结束本轮消息处理,进入下一轮消息处理过程。当IO操作完成后,将收到一条“IO完成”的消息,
处理该消息时就可以直接获取IO操作结果。
IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,
由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。
通常,程序完成IO操作会有Input和Output两个数据流。当然也有只用一个的情况,
比如,从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。
Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。
Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。
由于CPU和内存的速度远远高于外设的速度,所以IO操作分两种方式:
很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂。
因为异步IO需要知道什么时候完成了,有很多种方式,比如回调模式,轮询模式等。