文章目录

  • 前言
  • 创建多线程
  • 守护线程
  • 线程实例
    • 零基础Python学习资源介绍
      • 一、Python所有方向的学习路线
      • 二、Python学习软件
      • 三、Python入门学习视频
      • 四、Python练习题
      • 五、Python实战案例
      • 六、Python面试资料
      • 七、资料领取

前言

看过金庸武侠小说《射雕英雄传》和《神雕侠侣》的单鞋们应该都知道里面有一个人物叫老顽童周伯通,他会一种“双手互搏”的武功,可以同时左手画圆右手画方,一心二用,两只手同时施展不同的武功,后来小龙女也学会了这种功夫,一个人就可以施展本来需要两个人才可以施展的“玉女素心剑法”,功力大幅提升。

文末领取读者福利

在编程中,也有一种方法可以在一个程序运行时,同时做不同的任务,我们将这种方法叫做“多线程”。



多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

在Python编程中,内置了threading工具包,提供了Thread类,我们可以使用它来进行多线程编程。

创建多线程

#引入线程类。
from threading import Thread

预设线程要做的“任务”,一般是一个自定义函数,下面是2个自定义函数,task1需要5秒(我们使用了time工具包的sleep()函数让它等待5秒)做完;task2有一个参数n,它会重复n次从1打印到n。

def task1():print("任务1开始")sleep(5)print("任务1结束")
def task2(n):print("任务2开始")for i in range(n):print(i+1)print("任务2完成")

创建线程对象,让不同的线程去执行不同的“任务”。

# 线程t1去做任务1
t1 = Thread(target=task1)# 线程t2去做任务2,任务参数是5
t2 = Thread(target=task2, args=[5,])开始让线程们工作
t1.start()
t2.start()

完整代码

from threading import Thread
from time import sleep# 任务1
def task1():print("任务1开始")sleep(5)print("任务1结束")# 任务2
def task2(n):print("任务2开始")for i in range(n):print(i+1)print("任务2完成")# 线程t1去做任务1
t1 = Thread(target=task1)# 线程t2去做任务2,任务参数是5
t2 = Thread(target=task2, args=[5,])t1.start()
t2.start()print("主线程结束")

运行结果如下:

任务1开始
任务2开始
1
2
3
4
主线程结束
5
任务2完成
任务1结束

主线程等待其他线程完成再结束

在上面的例子中,我们可以看到主线程不等线程1和线程2完成,它就完成任务了,有时我们需要主线程等待子线程完成任务之后再结束,这时我们可以对线程对象使用join()方法。

from threading import Thread
from time import sleep......t1.start()
t2.start()# 主线程等待t1和t2完成任务之后再结束
t1.join()
t2.join()print("主线程结束")

运行结果如下:

任务1开始
任务2开始
1
2
3
4
5
任务2完成
任务1结束
主线程结束

守护线程

在上面的例子中,进程t1和t2可以在主线程结束之后继续工作,除非我们使用join()方法,让主线程等待他们完成任务之后再结束。我们还可以创建一种“守护线程”,“守护线程”可以理解为主线程创建他们之后,如果主线程结束了,不管子线程有没有完成任务,他们都会被停止工作,


from threading import Threadfrom time import sleep# 任务1
def task1():print("任务1开始")sleep(5)print("任务1结束")# 任务2
def task2(n):print("任务2开始")for i in range(n):sleep(1)print(i+1)print("任务2完成")# 线程t1去做任务1
t1 = Thread(target=task1)# 线程t2去做任务2,任务参数是5
t2 = Thread(target=task2, args=[5,], daemon=True)t1.start()
t2.start()print("主线程结束")

运行结果如下,我们可以看到主线程结束后,线程2的任务2没有完成也被停止了

任务1开始
任务2开始
主线程结束
1
2
3
4
任务1结束

使用daemon=True的线程t2被称之为“守护线程”, 主线程不用担心它,当主线程结束时,它会自动停止。

线程实例

我们经常在程序中使用的任务队列可以使用线程来实现,线程1负责往任务队列里增加任务,线程2(或者是多个线程)负责从队列中取出任务执行,现在我们来实用Python编程来制作一个简单的任务队列吧。


from threading import Thread
from time import sleep# 一个任务列表
task_list = []# 增加任务,将由线程1来执行
def add_task():while True:task = input()task_list.append(task)if task == "完成":# 如果用户输入的是完成,则break这个循环,不再执行print("增加任务完成")break# 执行任务,将由线程2来执行
def pop_task():while True:if task_list:task = task_list.pop()if task == "完成":# 如果任务内容是“完成”,则break这个循环,不再执行print("执行任务完成")breakprint("执行:{}".format(task))else:sleep(0.1)# 创建2个线程
t1 = Thread(target=add_task)
t2 = Thread(target=pop_task)# 让2个线程开始工作
t1.start()
t2.start()# 主线程等待线程1和线程2都完成才结束
t1.join()
t2.join()# 主线程打印完成
print("主线程完成")

运行结果如下:

aaa
执行:aaa
bbb
执行:bbb
ccc
执行:ccc
ddd
执行:ddd
qwer
执行:qwer
qewr
执行:qewr
qwr
q执行:qwr
er
q执行:qer
er
执行:qer
完成
增加任务完成
执行任务完成
主线程完成

在实际应用中,往往将一些比较耗时的工作放进任务队列中,由单独的线程去做,比如说抓取网页,一个线程负责将待抓取网页内容的网址放进任务队列中,另一个(或者多个)线程负责从任务队列中取出网址去执行抓取任务;或者控制机器人,机器人的传感器线程将获取的数据存放进任务队列,另一个(或者多个)线程负责从任务队列中取出数据,执行相应的控制机器人的动作等。


好了,今天的分享就到这里!如果你是0基础,想要学习Python的话,可以试试我整理的这份Python全套学习资料,0基础入门+进阶实战,学完就可以自己在网上帮人写写脚本,接单赚米了~

需要的可以自行扫描下方SCDN官方认证二维码免费领取

资料包括:Python永久使用安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、大厂面试题、Python练习题、Python实战案例源码等学习教程。带你从零基础到精通!

零基础Python学习资源介绍

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!

三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

七、资料领取

上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取

Python多线程编程详解,文章比较长,需耐心浏览相关推荐

  1. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

    本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一)                                       --Linux下多线程编程详解 原 ...

  2. python2异步编程_最新Python异步编程详解

    我们都知道对于I/O相关的程序来说,异步编程可以大幅度的提高系统的吞吐量,因为在某个I/O操作的读写过程中,系统可以先去处理其它的操作(通常是其它的I/O操作),那么Python中是如何实现异步编程的 ...

  3. 最新Python异步编程详解

    我们都知道对于I/O相关的程序来说,异步编程可以大幅度的提高系统的吞吐量,因为在某个I/O操作的读写过程中,系统可以先去处理其它的操作(通常是其它的I/O操作),那么Python中是如何实现异步编程的 ...

  4. Python异步编程详解

    一.异步编程相关概念 1.I/O模型 IO操作实际过程涉及到内核和调用这个IO操作的进程.对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝 ...

  5. Python爬虫——Python多线程爬虫详解

    网络爬虫程序是一种 IO 密集型程序,程序中涉及了很多网络 IO 以及本地磁盘 IO 操作,这些都会消耗大量的时间,从而降低程序的执行效率,而 Python 提供的多线程能够在一定程度上提升 IO 密 ...

  6. Java多线程编程详解

    文章目录 1.多线程的相关概念 2.Java中创建线程 2.1 继承Thread类 2.2 实现Runable接口 2.3 实现Callable接口 3.线程的状态 3.1 线程的5大状态介绍 3.2 ...

  7. python元编程详解

    什么是元编程 软件开发中很重要的一条原则就是"不要重复自己的工作(Don't repeat youself)",也就是说当我们需要复制粘贴代码时候,通常都需要寻找一个更加优雅的解决 ...

  8. linux很多python进程,Python多进程编程详解

    序. multiprocessing Python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在Python中大部分情况需要使用多进程.Python提供了非常好用的多进程包m ...

  9. 总结的太到位:python 多线程系列详解

    前言: 上vip课的时候每次讲到框架的执行,就会有好学的同学问用多线程怎么执行,然后我每次都会说在测开课程会详细讲解,这并不是套路,因为如果你不理解多线程,不清楚什么时候该用什么时候不该用,就会适得其 ...

最新文章

  1. 深入浅出的“深拷贝与浅拷贝”
  2. bitcoin cash的地址格式 cash addr 简介
  3. 语音识别真的比肩人类了?听听阿里iDST初敏怎么说
  4. Java黑皮书课后题第10章:*10.11(几何:Circle2D类)定义Circle2D类
  5. 前端学习(120):css精灵和好处
  6. 【Python】可视化神经网络训练过程时处理报错 train_acc=hist.history[‘acc’] KeyError: ‘acc’
  7. Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)
  8. cgroups(7)— Linux中文手册页
  9. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1.4 从默认值开始...
  10. Android开发学习笔记(11):NDK与Cygwin配置手顺
  11. 如何恢复计算机隐藏的文件夹,win10系统隐藏或取消隐藏文件夹的还原方案
  12. excel复选框_在Excel公式中使用复选框结果
  13. Qt程序无响应 原因总结
  14. 手机测试中的ICCID是什么?
  15. Acwing-4699. 如此编码
  16. 82、详解一个交换机能带动多少个网络监控摄像头
  17. 找工作就上智联,效果真快,然而让我去的公司都是泡我呢
  18. 机器学习入门 - Google的机器学习速成课程
  19. 文字图片转成点阵的小工具
  20. ssh服务器banner信息,几种情况下的banner信息修改

热门文章

  1. OpenModelica仿真RLC电路
  2. 艺展中国-一代名家刘泽仲作品展
  3. 元学习笔记——MAML
  4. 微信授权登录接口合集
  5. 首批预计才60万套。 四轮猴
  6. 梦幻模拟战pc版更新服务器正在维护,梦幻模拟战PC版免CD(更新2代跳出补丁 一些实用说明)...
  7. L2-037 包装机
  8. 虾皮运营之不实折扣有多严重?堪比双十一 虾皮运营技巧
  9. 弹弹堂服务器响应时间过长,弹弹堂游戏加载问题全攻略
  10. [转载]推荐不伤眼睛的文字背景色 VS背景色