windows下Python使用多进程的问题

时间:2021-03-10 11:29:50

最近在学习爬虫,对于线程、进程、多线程、多进程、协程研究了很多。因为我用的是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
    po.join()
if __name__=='__main__':
    s=time.time()
    main()
    e=time.time()
    print(e-s)

运行时间是:8.9330(对于30个URL来说,有点丧心病狂了,我在看看吧,这只是给大家借鉴下)

最后要注意的是,在win下使用多进程时,要有入口(if __name__=='__main__':),Pool要包装在函数内,再调用。

这是我自己的了解,可能还有不全面的地方,望大家多多包涵。