ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

人人都能学会的 Python 多线程指南

2022-03-02 23:02:11  阅读:181  来源: 互联网

标签:指南 do threading Python start 线程 something time 多线程


Python 中,多线程最常见的一个场景就是爬虫,例如这样一个需求,有多个结构一样的页面需要爬取,例如下方的URL(豆瓣阿凡达影评,以10个为例)

⚠️注意:文末提供技术交流群,完整版代码文末获取

  url_list = [
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=0',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=20',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=40',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=60',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=80',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=100',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=120',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=140',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=160',
      'https://movie.douban.com/subject/1652587/reviews?sort=time&start=180']

如果依次爬取,请求第一个页面——得到返回数据——解析数据——提取、存储数据——请求第二个页面,按照这样的思路,那么大量时间都会浪费在请求、返回数据上,如果在等待第一个页面返回数据时去请求第二个页面,就能有效地提高效率,多线程就可以实现这样的功能。

在Python中实现多线程的方法也很多,我将基于 threading 模块一点一点介绍,注意本文不会太注重于多线程背后的技术概念(面试常问),仅希望用最少的话教会大家如何实现。当然会在最后介绍如何使用threading模块来解决上面的爬虫问题。

threading基本使用

让我们先从一个简单的例子开始,定义do_something函数,执行该函数需要消耗1秒

import time

start = time.perf_counter()

def do_something():
    print("-> 线程启动")
    time.sleep(1)
    print("-> 线程结束")

do_something()

finish = time.perf_counter()

print(f"全部任务执行完成,耗时 {round(finish - start,2)} 秒")

上面的代码不难理解,执行do_something并计算耗时,结果很明显应该是1s

-> 线程启动
-> 线程结束
全部任务执行完成,耗时 1.01 秒

现在如果需要执行两次do_something,按照最基本的思路

import time

start = time.perf_counter()


def do_something():
    print("-> 线程启动")
    time.sleep(1)
    print("-> 线程结束")


do_something()
do_something()

finish = time.perf_counter()

print(f"全部任务执行完成,耗时 {round(finish - start,2)} 秒")

执行上面代码结果也很容易猜到是2秒

-> 线程启动
-> 线程结束
-> 线程启动
-> 线程结束
全部任务执行完成,耗时 2.01 秒

这就是最常规的 同步 思路,在CPU执行第一个函数,也就是等待1s的时间内,什么也不干,等第一个函数执行完毕后再执行第二个函数图片

很明显,这样让CPU干等着啥也不干并不是一个很好的选择,而多线程就是解决这一问题的方法之一,让CPU在等待某个任务完成时去执行更多的操作,将整个过程简化为下图流程,这样就能充分节省时间图片

现在使用threading来通过多线程的方式实现上面的过程,非常简单,定义两个线程并依次启动即可

标签:指南,do,threading,Python,start,线程,something,time,多线程
来源: https://blog.csdn.net/qq_34160248/article/details/123242462

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有