最近在学习爬虫,对于线程、进程、多线程、多进程、协程研究了很多。因为我用的是WIN7,所以一切都是在win下实现的。
在WIN下使用多进程的包multiprocessing(这是第三方包,不是模块),它有几个类:Process要在终端下运行,IDLE运行不了;
同样的Pool(进程池)的map函数和Process一样要在终端运行。但奇怪的是Pool 的apply_async(异步执行)却可以在IDLE下运行,终端却没输出。
具体原因在慢慢了解,之后再更新吧。
代码如下:
#用进程池异步下载30个URL,和前一篇作比较
import random
import time
import requests
from multiprocessing import Pool
def down(url):
s=requests.Session()
res=s.get(url)
a=random.randint(0,40)
f=open('%d.jpg'%a,'wb')
f.write(res.content)
def main():
f=open('E:\Python\py\process+xiec\\test.txt','r')
a=f.readlines()
po=Pool(3)
for i in a:
po.apply_async(down,(i,))
po.close()#进程池一定要先关在join