多线程_Python单线程与多线程

最近一直在学习爬虫的相关知识,目前学习到了单线程、多线程这一块,把自己的学习经历分享出来顺便也做个笔记。

一.单线程操作

单线程操作就是我们日常写代码时的操作,为了比较出和多线程的区别,以下为其对比。

#使用单线程串行方式执行import timedef get_page(str):    print('正在下载:',str)    time.sleep(2)    print('下载成功:',str)name_list = ['xiaozi','aa','bb','cc']start_time = time.time()for i in range(len(name_list)):    get_page(name_list[i])end_time  = time.time()print('%d second' % (end_time-start_time))
正在下载: xiaozi下载成功: xiaozi正在下载: aa下载成功: aa正在下载: bb下载成功: bb正在下载: cc下载成功: cc8 second

二.多线程操作

首先引入多线程模块

from multiprocessing.dummy import Pool

之后还是与双方大致相同。

def get_page(str):    print('正在下载:',str)    time.sleep(2)    print('下载成功:',str)name_list = ['xiaozi','aa','bb','cc']start_time = time.time()

其次,要实例化一个线程池

pool = Pool(4)#这里的4是4个线程pool.map(get_page,name_list) #函数与可迭代对象end_time = time.time()print('%d second' % (end_time-start_time))

运行之后可以发现

正在下载: xiaozi正在下载: aa正在下载: bb正在下载: cc下载成功: xiaozi下载成功: aa下载成功: cc下载成功: bb2 second

速度明显提升。但利用这种多线程处理的方法也是有一定的缺陷,线程池中的线程或进程的数量有上限。
下面是多线程的代码:

from multiprocessing.dummy import Pooldef get_page(str):    print('正在下载:',str)    time.sleep(2)    print('下载成功:',str)name_list = ['xiaozi','aa','bb','cc']start_time = time.time()pool = Pool(4)#这里的4是4个线程pool.map(get_page,name_list) #函数与可迭代对象end_time = time.time()print('%d second' % (end_time-start_time))

目前我个人来说使用的方式一般是单线程+异步协程。

4caec26a3821c79648bd24503a2b6004.png

感谢阅读、!!!

多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值