最近想用python写个爬虫,根据学校图书馆网站的学号来破解密码。由于学校图书馆初始密码为6位数字,而且不需要验证码,所以破解起来很简单。思路就是生成6为数字暴力密码本,依次向网页POST“学号-密码”的表单即可。然后问题来了,6位数字组成的密码,也就是0-9的六位全排列,共1000000中排列。 短短40行的单进程代码,需要56个小时才能把1000000个暴力密码轮询完毕。可怕。。。。 以前学习的时候,多线程和多进程的非阻塞式编程浅尝辄止,真是书到用时方恨少。
由于Python语言的“多线程”并不能提高效率,所以在这里温习一下“多进程”的用法:
python的用多进程池来管理所有的进程,步骤如下:
1)实例化进程池 p=Pool()。
2)通过apply_async()函数向进程池中添加进程。
3)通过p.close()函数关闭进程池,关闭之后无法继续添加新的进程。与此同时,CPU开始从进程池中取进程,若CPU有N核,则CPU每次只会取N个进程,待N个进程全部
执行完毕,再取出N个。直到将进程池中的进程取完为止。
4)通过p.join()函数等待所有进程被取出并执行完毕。
示例代码如下:
import time
from multiprocessing import Pool
def long_time_task(name):
print 'task %s starts running' % name
time.sleep(3)
print