一、示例代码:
from multiprocessing import Pool
import time
import requests
urls = [ # 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.text
else:
return ''
if __name__ == '__main__':
urls = urls * 1
start = 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倍之多。