基于multiprocessing.pool的多进程池与单进程访问多网页的比较示例
一、示例代码:
from multiprocessing import Pool
import time
import requestsurls = [ # URL队列,通过多进程访问'http://www.python.org','http://www.python.org/about/','http://www.python.org/doc/','http://www.python.org/download/','http://www.python.org/getit/','http://www.python.org/community/','https://wiki.python.org/moin/','http://planet.python.org/','https://wiki.python.org/moin/LocalUserGroups','http://www.python.org/psf/','http://docs.python.org/devguide/','http://www.python.org/community/awards/'
]def open_url(url):res = requests.get(url)if res.status_code == 200:return res.textelse:return ''if __name__ == '__main__':urls = urls * 1start = time.time() # 单进程
pool1 = Pool(processes=1)
results = []
for url in urls:results.append(pool1.apply_async(open_url, (url,)))
pool1.close()
pool1.join()
print('单进程执行时间:', time.time() - start)start = time.time() # 多进程
pool2 = Pool(processes=4)
results = []
for url in urls:results.append(pool2.apply_async(open_url, (url,)))
pool2.close()
pool2.join()
print('多进程执行时间:', time.time()-start)
二、主要函数解读:
apply_async()函数的功能是向进程池提交多个url请求。它支持非阻塞、返回结果后进行回调的方式。
三、运行结果:

四、结论:
与前一篇的多线程池与单线程访问多网页所用的时间差别只有3倍的比较,此篇的多进程池与单进程访问多网页使用的时间差别,有17倍之多。