多线程、协程和多进程并发编程

这篇具有很好参考价值的文章主要介绍了多线程、协程和多进程并发编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

37.1 如何通俗理解线程和进程?
进程:进程就是正在执⾏的程序。
线程:是程序执⾏的⼀条路径, ⼀个进程中可以包含多条线程。
通俗理解:例如你打开抖⾳,就是打开⼀个进程,在抖⾳⾥⾯和朋友聊天就是开启了⼀条线程。
再举⼀个例⼦:
在某⻝堂打饭的时候,此⻝堂安排三个打饭⼤妈打饭,所有同学依次排成三个队伍,每个打饭⼤ 妈相当于⼀个线程。
这个⻝堂相当于⼀个进程,他⼀共有三个打饭⼤妈,相当于进程⾥有三个线程。
两者之间的关系:
⼀个进程⾥⾯可以有多条线程,⾄少有⼀条线程。
⼀条线程⼀定会在⼀个进程⾥⾯。
关于协程我会放在后⾯讲完线程和进程时再讲解。

37.2 Python如何启动⼀个线程?
⼀般的,程序默认执⾏只在⼀个线程,这个线程称为主线程,例⼦演示如下:
导⼊线程相关的模块 threading:

 import threadin

threading的类⽅法 current_thread()返回当前线程:

 t = threading.current_thread()
 print(t)

看到 MainThread,验证了程序默认是在MainThead中执⾏。
t.getName()获得这个线程的名字
其他常⽤⽅法,t.ident获得线程id
is_alive() 判断线程是否存活
那么,如何创建⾃⼰的线程呢?
下⼀节课我们了解:如何在Python中创建⼀个新线程

 my_thread = threading.Thread()
 

创建线程的⽬的是告诉它帮助我们做些什么,做些什么通过参数target传⼊,参数类型为 callable,函数就是可调⽤的

 def print_i(end):
      for i in range(end):
               print(f'打印i={i}')
my_thread = threading.Thread(target=print_i, args=(10,))

my_thread线程已经全副武装,但是我们得按下发射按钮,启动start(),它才开始真正起⻜。
my_thread.start()
打印结果如下,其中args指定函数print_i需要的参数i,类型为元祖。
打印i=0 打印i=1 打印i=2 打印i=3 打印i=4 打印i=5 打印i=6 打印i=7 打印i=8 打印i=9
⾄此,多线程相关的核⼼知识点,已经总结完毕。但是,仅仅知道这些,还不够!光纸上谈兵, 当然远远不够。

37.4 【案例】如何理解多线程的⼯作(交替获得时间 ⽚)?
为了更好解释多线程之间的⼯作,开辟3个线程,装到threads中

 import time from datetime import datetime import threading 
 
 
def print_time():     for _ in range(5): # 在 每 个 线 程 中 打 印 5 次
         time.sleep(0.1) # 模 拟打 印 前 的相 关 处 理 逻辑
         print('当前线程%s,打印结束时间为:%s'%(threading.current_thread().getName(
 
 
threads = [threading.Thread(name='t%d'%(i,),target=print_time) for i in range(3)]
 [t.start() for t in threads]

打印结果如下,t0,t1,t2三个线程,根据操作系统的调度算法,轮询获得CPU时间⽚,注意观察:

37.5 【案例】如何理解多线程抢夺同⼀个变量?
多线程编程,存在抢夺同⼀个变量的问题。
⽐如下⾯例⼦,创建的10个线程同时竞争全局变量 a :文章来源地址https://www.toymoban.com/news/detail-431043.html

 import threading 
 
 
a = 0 
def add1():
     global a
     a += 1
     print('%s  adds a to 1: %d'%(threading.current_thread().getName(),a))
threads = [threading.Thread(name='t%d'%(i,),target=add1) for i in range(10)] [t.start() for t in threads] 

到了这里,关于多线程、协程和多进程并发编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java 并发编程】一文读懂线程、协程、守护线程

    在 Java 线程的生命周期一文中提到了 就绪状态的线程在获得 CPU 时间片后变为运行中状态 ,否则就会在 可运行状态 或者 阻塞状态 ,那么系统是如何分配线程时间片以及实现线程的调度的呢?下面我们就来讲讲线程的调度策略。 线程调度是指系统为线程分配 CPU 执行时间片

    2023年04月08日
    浏览(59)
  • 【Python】多线程编程 ① ( 线程相关概念 | 进程 | 线程 | 协程 / 纤程 | 管程 )

    进程 与 操作系统 : 进程 是 操作系统 中 能够独立运行的单元 , 是 操作系统 对 正在运行的 应用程序 的 抽象结构 描述 ; 操作系统 中 运行的每个 应用程序 就是一个进程 ; 一个操作系统中可以运行 多个 进程 ; 每个 应用程序 都会被 操作系统 分配一个 进程 ID ; 多个进程之间

    2024年02月15日
    浏览(38)
  • Python渗透测试编程基础——线程、进程与协程

    目录  一、进程与线程的概念 1.进程 2.线程 3.进程和线程的关系 4.任务执行方式 二、Python中的Threading模块 1.线程模块介绍 2.Threading介绍 (1)方法和属性 (2)类方法 三、线程简单编写 1.流程 2.创建线程 (1)方法一 (2)方法二 3.例子 四、守护线程 五、线程同步技术 1.线程

    2024年02月01日
    浏览(50)
  • 多线程|多进程|高并发网络编程

    多进程并发服务器是一种经典的服务器架构,它通过创建多个子进程来处理客户端连接,从而实现并发处理多个客户端请求的能力。 概念: 服务器启动时,创建主进程,并绑定监听端口。 当有客户端连接请求时,主进程接受连接,并创建一个子进程来处理该客户端连接。

    2024年02月07日
    浏览(37)
  • JUC并发编程学习笔记(一)认知进程和线程

    进程 一个程序,如QQ.exe,是程序的集合 一个进程往往可以包含多个线程,至少包含一个 java默认有两个线程,GC垃圾回收线程和Main线程 线程:一个进程中的各个功能 java无法真正的开启线程,因为java是运行在虚拟机上的,所以只能通过C++,通过native本地方法调用C++开启线程

    2024年02月06日
    浏览(55)
  • python-16-线程池和进程池python并发编程

    Python ThreadPoolExecutor线程池 线程池的基本原理是什么? 利用Python快速实现一个线程池,非常简单 Python并发编程专题 一、为什么要引入并发编程? 场景1:一个网络爬虫,按顺序爬取花了1小时,采用并发下载减少到20分钟! 场景2:一个APP应用,优化前每次打开页面需要3秒,采

    2024年02月04日
    浏览(38)
  • Linux网络编程:多进程 多线程_并发服务器

    文章目录: 一:wrap常用函数封装 wrap.h  wrap.c server.c封装实现 client.c封装实现 二:多进程process并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 三:多线程thread并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 ​​​​   read 函数的返回值 wrap.h  wrap

    2024年02月12日
    浏览(56)
  • Python中的并发编程:多线程与多进程的比较【第124篇—多线程与多进程的比较】

    在Python编程领域中,处理并发任务是提高程序性能的关键之一。本文将探讨Python中两种常见的并发编程方式:多线程和多进程,并比较它们的优劣之处。通过代码实例和详细的解析,我们将深入了解这两种方法的适用场景和潜在问题。 多线程是一种轻量级的并发处理方式,适

    2024年03月14日
    浏览(106)
  • 计算机网络编程 | 并发服务器代码实现(多进程/多线程)

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《网络编程》 当涉及到构建高性能的服务

    2024年02月08日
    浏览(81)
  • Linux中 socket编程中多进程/多线程TCP并发服务器模型

    一次只能处理一个客户端的请求,等这个客户端退出后,才能处理下一个客户端。 缺点:循环服务器所处理的客户端不能有耗时操作。 模型 源码 可以同时处理多个客户端请求 父进程 / 主线程专门用于负责连接,创建子进程 / 分支线程用来与客户端交互。 模型 源码 模型 源

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包