浅析协程

前言

以前我们的程序都是单线程,只有一个控制流,在像Web服务这样的应用里不能同时服务多个用户。后来我们使用多线程,一个用户由一个线程全程负责,CPU根据时间片在线程之间切换,只要CPU切换得够快,用户就感受不到延迟。

但是多线程切换是由操作系统调度的,我们的应用代码无法控制。虽然说,被IO操作阻塞的线程,内核会把它挂起,不参与线程切换。但是线程也不能无限增加,否则CPU时间就花在线程切换和挂起唤醒上了,真正运行代码的时间就少了。

这时候我们就会想,多线程不就是多个控制流嘛,能不能只有一个线程,但有多个控制流,什么时候切换由我们自己决定。当然可以,这就是 **协程(Coroutine)**。

阅读更多

Python 随记

Python 程序入口

有时候我们会看到

1
2
3
if __name__ == '__main__':
dosomething()
# ...

这个语句中, __name__ 是当前模块名,当模块被直接运行时模块名为 __main__

这句话的意思就是,当模块被直接运行时,dosomething()块将被运行,当模块是被导入时,dosomething()块不被运行。

阅读更多

用Python查成绩(二) 获取成绩

前言碎语

上一篇 用Python的requests库伪装成浏览器,模拟登录了学校的教务系统。登录进去之后,就可以开始做我们想做的事啦!

这一篇主要写写登录进去之后进入查询成绩页面,以及如何提取成绩信息。

阅读更多

用Python查成绩(一) 模拟登录

前言碎语

这个小项目的起因是每到期末,成绩总是一科一科不定时地出,每天都要登录教务系统查询成绩页面看看成绩出了没,出了没?

于是乎,就想到能不能用Python爬虫模拟登录教务系统,一键获取本学期所有科目的成绩!当然,一开始是想放到后台不断地自动查询、获取,等成绩更新的时候自动推送Email或微信。但鉴于时间、难度、寒假安排…想想还是暂时先做个一键脚本吧。

Just do it !首先来看看教务系统长什么样

jwgl

学校的教务系统是流行的正方教务管理系统,我们可以用 Python 的 requests 库来模拟登录。然后往方框里提交(post)正确的学号、密码和验证码,即可登录。

需要的储备知识:

  1. http协议
  2. python 3基本语法,request库的使用
  3. xpath和正则表达式
  4. cookie和session的功能和区别
阅读更多

使用Python遍历文件

下载了很多歌曲,有些是.mp3格式的,有些是.flac格式,还有的是.wav.ape各种各样。我们知道,.flac.ape是无损格式,所以我想保留这两种格式的文件,删掉.wav.mp3格式的音乐。

可以用 Python 自动化处理。

阅读更多

Python 中的 virtualenv

开发 Python 应用程序的时候,需要安装(import)各种各样的第三方包。默认情况下,都会被安装到Python 3的 site-packages 目录下面。比如,我的第三方包统一安装在目录C:\Program Files\Python36\Lib\site-packages下面。

但是,当我们开发多个项目的时候,如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办?

virtualenv 就是用来为特定的应用程序创造一套独立的运行环境的。

如何你用的是Python 3,还可以直接创建虚拟环境(见第二部分)

阅读更多