windows下Python使用多进程的问题

  • Post author:
  • Post category:python


最近在学习爬虫,对于线程、进程、多线程、多进程、协程研究了很多。因为我用的是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要包装在函数内,再调用。

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



版权声明:本文为grs294845170原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。