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

一、示例代码:

from multiprocessing.dummy import Pool as ThreadPool
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 openurl(url):
    res = requests.get(url)
    if res.status_code == 200:
        return res.text
    else:
        return ''


if __name__ == '__main__':
    urls = urls * 1

    start = time.time()
    pool_1 = ThreadPool(1)
    results = pool_1.map(openurl, urls)
    pool_1.close()
    pool_1.join()
    print('单线程执行时间:', time.time()-start)

    start_2 = time.time()
    pool_2 = ThreadPool()
    results_2 = pool_2.map(openurl, urls)
    pool_2.close()
    pool_2.join()
    print('多线程执行时间:', time.time()-start_2)

二、关键函数说明:

利用multiprocessing.dummy创建并使用线程池。主要函数:

pool=ThreadPool(n):创建由n个线程组成的线程池。n值即CPU的核数。默认值省略参数。

results=pool.map(openurl,urls):在线程中执行打开网页并获取结果的操作。

pool.close():关闭pool,不再接收新的任务。

pool.join():等待子进程的退出。一定要注意,必须在调用close()方法后才能调用join()。

执行close()方法后不允许新的进程加入线程池,join()方法等待所有子进程结束。

上述代码采用了线程池方式。利用multiprocessing.pool模块也可以实现进程池方式。

三、运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

m0_64880493_江哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值