基于multiprocessing.pool的多进程池与单进程访问多网页的比较示例

本文通过实例展示了使用Python的multiprocessing模块中的Pool实现多进程访问网页,对比了多进程与单进程在处理大量URL时的时间差异,结果显示多进程有显著的性能提升,但与多线程相比,提升幅度更大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、示例代码:

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请求。它支持非阻塞、返回结果后进行回调的方式。

三、运行结果:

c0a3ca3734cf4949a9c702da6dff44dc.png

四、结论:

与前一篇的多线程池与单线程访问多网页所用的时间差只有3倍,此篇的多进程池与单进程访问多网页所用的时间差,有17倍之多。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_64880493_江哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值