python进阶:多线程原理python(四)

news2024/11/25 13:45:51

1.并发的概念python基础

举个例子:

1.1并发与并行

并发:逻辑上具备同时处理多个任务的能力

并行: 物理上在同一时刻执行多个并发任务

1.2什么是线程,什么是进程

开个QQ,开了一个进程;开了迅雷,开了一个进程

在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程

所以运行某个软件,相当于开了一个进程。在这个软件运行的过程里(在这个进程里),多个工作同时运转,完成了QQ的运行,那么这“多个工作”分别有一个线程,所以一个进程管着多个线程,一个进程有且至少有一个线程
线程与进程的区别(了解)

  • 线程共享创建它的进程的地址空间;进程有自己的地址空间。
  • 线程可以直接访问其进程的数据段;进程有它们自己的父进程的数据段副本。
  • 线程可以直接与进程中的其他线程通信:进程必须使用进程间通信来与兄弟进程通信。
  • 容易创建新线程;新进程需要父进程的复制。
  • 线程可以对同一进程的线程进行相当大的控制;流程只能对子流程进行控制
  • 对主线程的更改(取消、优先级更改等)可能会影响进程中其他线程的行为;对父线程的更改不会影响子进程。
     

2.python线程代码实操

2.1创建线程

# -*- coding: utf-8 -*-
# @File : 可删1.py
# @Time : 2024/6/17 15:29
# @Author : syq
# @Email : 1721169065@qq.com
# @Software: PyCharm
import threading
import time
def foo(something):
    for i in range(10):
        # time.sleep(1)
        print(something)

#创建线程 target=foo 其中foo是作为参数传递,不用带()
#Thread是一个类
t1=threading.Thread(target=foo,args=("看电影",))
t2=threading.Thread(target=foo,args=("听音乐",))

#启动线程
t1.start()
t2.start()

2.2.join函数

# -*- coding: utf-8 -*-
# @File : 可删1.py
# @Time : 2024/6/17 15:29
# @Author : syq
# @Email : 1721169065@qq.com
# @Software: PyCharm
import threading
import time
def foo(something):
    for i in range(10):
        # time.sleep(1)
        print(something)

#创建线程 target=foo 其中foo是作为参数传递,不用带()
#Thread是一个类
t1=threading.Thread(target=foo,args=("看电影",))
t2=threading.Thread(target=foo,args=("听音乐",))

#启动线程
t1.start()
t2.start()
#join在子线程完成运行之前,这个子线程的父线程将一直被阻塞
t1.join()
t2.join()

print("启动数据检查...")  #即t1和t2线程要都运行结束,才会运行该行

2.3守护线程

# -*- coding: utf-8 -*-
# @File : 可删1.py
# @Time : 2024/6/17 15:29
# @Author : syq
# @Email : 1721169065@qq.com
# @Software: PyCharm
import threading
import time
def foo(something):
    for i in range(10):
        time.sleep(1)
        print(something)

#创建线程 target=foo 其中foo是作为参数传递,不用带()
#Thread是一个类
t1=threading.Thread(target=foo,args=("看电影",))
t2=threading.Thread(target=foo,args=("听音乐",))
#声明守护线程程,必须在start调用之前申明守护线程
t1.setDaemon(True)
t2.setDaemon(True)
#启动线程
t1.start()
t2.start()

for i in range(5):
    time.sleep(1)
    print("消费数据")
print("消费需求已经满足了")  #打印完这句话后,其他线程就算没有结束,也不会再运行了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Seata】分布式事务解决方案——理论

目录 回顾什么是事务数据库事务的四大特性:ACID 分布式事务解释面临挑战分布式事务产生场景1. 单体架构中多数据源场景2. 分布式架构场景 分布式事务解决方案jta AtomikosLCN模式问题 Alibaba的Seata解决分布式事务问题 使用MQ解决分布式事务问题问题1:…

2025年计算机毕业设计题目参考

今年最新计算机毕业设计题目参考 以下可以参考 springboot洗衣店订单管理系统 springboot美发门店管理系统 springboot课程答疑系统 springboot师生共评的作业管理系统 springboot平台的医疗病历交互系统 springboot购物推荐网站的设计与实现 springboot知识管理系统 springbo…

管道塞满钢珠,推动一端的钢珠另一端钢珠瞬间掉落,超光速了吗?

管道塞满钢珠,推动一端的钢珠另一端钢珠瞬间掉落,超光速了吗? 现实中我们感觉钢珠瞬间掉落,好像是超光速了,其实不然,那只是我们的错觉。我们日常生活中感受到的速度与光速相比实在太慢了,以至…

MoonBit 亮相港科大「 INNOTECH 创科嘉年华」,技术创新实力备受瞩目

INNOTECH创科嘉年华 6月16日, MoonBit 作为 IDEA 研究院重点项目成果受邀参与一年一度由香港科技大学(广州)主办的「INNOTECH 创科嘉年华」,作为港科大(广州)每年最重要的科创实力展示机会,本次…

qmt量化交易策略小白学习笔记第37期【qmt编程之指数数据--如何获取迅投商品市场指数行情数据】

qmt编程之获取商品市场指数数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取迅投商…

“AUTOSAR Nvm_WriteAll()掉电无法正常更新Nvm数据” 问题分析

1、问题现象 再掉电时调用Nvm_WriteAll()函数后,再重新上电,发现下电前更新得NvmBlock数据未被正确更新到Nvm中。掉电时直接调用Nvm_WriteBlock()函数,可以正常更新指定得NvmBlock块。 2、排查 NvM_InterWriteAll()函数有被正常执行。NvM_I…

Python期末复习题库(上)

1. (单选题) Python源程序的扩展名为( A ) A. py B. c C. class D. ph 2. (单选题) 下列( A )符合可用于注释Python代码。 A. # B. */ C. // D. $ 3. (单选题)下列关于Python 语言的特点的说法中,错误的是&#xf…

【C++修行之道】C/C++内存管理

目录 一、C/C内存分布 1. 选择题: 2. 填空题: 3. sizeof 和 strlen 区别? 二、 C语言中动态内存管理方式:malloc/calloc/realloc/free 1.malloc/calloc/realloc的区别是什么? 2.这里需要free(p2)吗&#xff…

计算机图形学入门15:几何表示

1.几何概论 通过图形学建模表示现实生活中的各种物体,要解决的第一个问题就是如何定义物体形状,而这就涉及到了几何(Geometry)。如下图所示,各种各样的玻璃水杯、车子上的不同部件、水花四溅的模拟、病毒的微观结构等这些几何形状。 那么如何…

Pikachu靶场--文件包含

参考借鉴 Pikachu靶场之文件包含漏洞详解_pikachu文件包含-CSDN博客 文件包含(CTF教程,Web安全渗透入门)__bilibili File Inclusion(local) 查找废弃隐藏文件 随机选一个然后提交查询 URL中出现filenamefile2.php filename是file2.php&…

MCK主机加固在防漏扫中的关键作用

在当今这个信息化飞速发展的时代,网络安全成为了企业不可忽视的重要议题。漏洞扫描,简称漏扫,是一种旨在发现计算机系统、网络或应用程序中潜在安全漏洞的技术手段。通过自动化工具,漏扫能够识别出系统中存在的已知漏洞&#xff0…

C++项目实战:SPDK文件系统

目录 一、Blobstore设计框架二、Cache机制三、Blob FS I/O操作四、SPDK FUSE (Filesystem in Userspcae) 前言 Blob FS是spdk面向于用户态的轻量级的文件系统 SPDK通过绕过内核(kernel bypass)的方案,构筑了用户态驱动,并利用异步轮询、无锁机制等&a…

函数依赖-函数依赖、平凡函数依赖、完全与部分函数依赖、传递函数依赖

一、引言 函数依赖是关系模式中属性与属性之间存在的一种重要数据依赖 1、将关系模式R的模式结构改为 R(SNO,CNO,SN,SD,DD,GRADE) 并对属性列进行重命名 R(学生学号&#xff0c…

msvcp100.dll已加载但找不到入口点的处理方法,分析比较靠谱的msvcp100.dll解决方法

用户在日常使用中有时会遇到一个错误提示:“已加载 msvcp100.dll,但找不到入口点”。这一信息不仅引发了使用上的不便,也对软件的稳定性产生了质疑。理解并解决该问题不仅对确保计算机正常运行至关重要,也对维护软件的长期稳定性和…

油猴 脚本如何添加包含哪个网址 执行脚本

油猴 脚本如何添加包含哪个网址 执行脚本 在这里面加上就可以 // include *://blog.csdn.net/*/article/details/* // include *.blog.csdn.net/article/details/*

【随手记】贴一段matplotlib绘图的多图拼接代码

二维: import numpy as np import matplotlib.pyplot as pltpic_names ["pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9", "pic10&qu…

代理四川公司疑难商标办理商标异议复审办理

申请商标注册或者办理其他商标事宜,可以自行办理,也可以委托依法设立的商标代理机构办理。外国人或者外国企业在中国申请商标注册和办理其他商标事宜的,应当委托依法设立的商标代理机构办理,按照被代理人的委托办理商标注册申请或…

BEV 中 multi-frame fusion 多侦融合(一)

文章目录 参数设置align_dynamic_thing:为了将动态物体的点云数据从上一帧对齐到当前帧流程旋转函数平移公式filter_points_in_ego:筛选出属于特定实例的点get_intermediate_frame_info: 函数用于获取中间帧的信息,包括点云数据、传感器校准信息、自车姿态、边界框及其对应…

EasyCVR/EasyDSS无人机直播技术助力野生动物监测:开启野生动物保护新篇章

近日有新闻报道,一名挖掘机师傅在清理河道时,意外挖出一只稀有的扬子鳄,挖机师傅小心翼翼地将其放在一边,扬子鳄也顺势游回一旁的河道中。 随着人类对自然环境的不断探索和开发,野生动物及其栖息地的保护显得愈发重要。…

压测怎么做?如何自动化?盘点各大公司全链路压测方案与实践

本文综合盘点各大公司团队的全链路压测技术方案和实践路径,供大家参考。 一、什么是全链路压测? 全链路压测指的是基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,并持续调优的过程。常用…