多线程——python进阶知识

多线程与多进程的区别

多线程是单个内核通过锁的手段实现同一时间运行多个程序,在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果,需要借助锁、队列等保证进程的同步。

多进程是多个内核执行多个任务,可以实现一时间完成多个任务,保证提升效率

python中的多线程

import threadingprint(threading.active_count())   # 查看当前线程数量
print(threading.enumerate())    # 查看所有线程名称
print(threading.current_thread())    # 查看当前正在运行的线程的名词

 指定新线程内容和名称,并启动

def job():print("I'm a new threading!")def main():my_threading = threading.Thread(target=job, name="T1")    # 定义新的线程my_threading.start()if __name__ == "__main__":main()

join方法,把分支加入到主线程中

import timedef job2():for _ in range(10):time.sleep(0.1)print("I'm the second threading!")# 合并了多个线程
def run1():my_threading = threading.Thread(target=job, name="T1")   my_threading2 = threading.Thread(target=job2, name='T2')my_threading.start()my_threading2.start()my_threading.join()my_threading2.join()print("Finished!",end='\n\n')
run1()# 没有合并多个线程
def run2():my_threading = threading.Thread(target=job, name="T1")   my_threading2 = threading.Thread(target=job2, name='T2')my_threading.start()my_threading2.start()print("Finished!")
run2()

利用Queue队列完成多线程数据的存取

因为新线程的函数是无法使用return完成数据的返回,因此需要借助队列完成数据放入和取出操作

from queue import Queuedef job(l, q):"""l: 被操作的list数据q:存储操作后数据的队列线程的工作内容,对每个list执行平方的操作"""for i in range(len(l)):l[i] = l[i]**2q.put(l[i])    # 队列存放运算后的数据def multithreading(data):q = Queue()for i in range(4):t = threading.Thread(target=job, args=(data[i],q))t.start()    # 启动线程t.join()    # 合并线程到主线程中results = []    # 存放每个线程运算的结果for _ in range(4):results.append(q.get())    # 取出队列的数据放入结果中print(results)multithreading([[1,2,3], [2,3,4], [3,4,5], [4,5,6]])

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能学术顶会——NeurIPS 2022 议题(网络安全方向)清单、摘要与总结

按语:随着大模型的崛起,将AI再次推向一个高峰,受到的关注也越来越大。在网络安全领域,除4大安全顶会外,一些涉及AI的安全话题,包括对AI的攻防研究,以及应用AI做安全的研究方向,也会发…

快讯丨北京市委书记尹力到极智嘉调研指导

据北京日报7月4日报道,2023全球数字经济大会开幕前夕,市委书记尹力围绕“深入学习贯彻新时代中国特色社会主义思想,推进全球数字经济标杆城市建设”,到海淀区、朝阳区调查研究。 7月3日下午,北京市委书记尹力到极智嘉全…

ThreadLocal(全)- 代码实现

ThreadLocal是Java中一个非常重要的线程技术。它可以让每个线程都拥有自己的变量副本,避免了线程间的竞争和数据泄露问题。在本文中,我们将详细介绍ThreadLocal的定义、用法及其优点。 ThreadLocal是Java中一个用来实现线程封闭技术的类。它提供了一个本…

环境搭载vscode

Windows 10 下 VS Code 配置 C 开发环境(MinGW) 读书读傻了哟 配置 C/C 环境   主要是配置launch.json、tasks.json这两个文件(当然,还有别的.json文件,可有可无)。这两个文件位于.vscode文件夹下&#…

ubuntu实现自动挂载u盘

ubuntu实现自动挂载u盘 但是,有些设施可以在没有图形工具的情况下进行复制,并且在系统上占用的空间非常小。 例如,在我的设置中,我已经实现了USB自动挂载服务,而无需使用任何外部工具/服务,只有udev和syst…

GAN:生成对抗网络的突破与应用

第一章:引言 在当今信息时代,人工智能技术的发展如日中天。其中,生成对抗网络(GAN)作为一种强大的生成模型,引起了广泛的关注和研究。GAN通过两个相互对抗的神经网络,即生成器和判别器&#xf…

vite性能优化提升开发体验之hmr和预编译

一、vite中的预编译 1. 预编译概念介绍 Vite,一个由Vue.js开发者尤雨溪开发的新型前端构建工具,主要利用了现代浏览器支持的ESM(ES模块)来进行快速开发。Vite在法语中意为“快”,其中最大的亮点就是其开发服务器启动…

18 SAR图像和光学图像的配准算法(matlab程序)

1.简述 合成孔径雷达(synthetic aperture radar,SAR)图像配准的主要目标是对同一或不同传感器在不同时间、不同视点捕获的SAR图像进行配准。SAR因具有全天候成像能力和地物穿透能力,因此具有非常广泛的应用,如变化检测[1]、图像融合[2]、目标检测与识别[…

低代码——现代数字化人才培养的创新引擎

如今,随着数字时代的蓬勃发展,催生了各行各业数字化转型的浪潮。如果说技术是衍生数字时代的基石,那数字化人才一定是这场浪潮中不可或缺的推动力量。 随着新兴技术的不断创新和应用,全行业对于复合型、创新型的优秀数字化人才需…

stm32usart+中断接收定长数据

文章目录 前言一、cubemx的配置二、代码编写1.主函数在这里插入图片描述2. it.c 总结 前言 中断接收固定的数据值。 一、cubemx的配置 开启USART1 打开NVIC中断 二、代码编写 1.主函数 #define RxBuf_SIZE_1 50 //USART1接收缓冲区大小 #define MainBuf_SIZE_1 50 //USAR…

软件工程——第11章面向对象设计知识点整理

本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.什么是面向对象设计(OOD)? 2.优秀设计的主要特点是? 3.面向对象设计应遵循的准则有哪些&#xff1f…

开悟AIArena,深度学习神经网络,暑假开悟比赛的学习

目录 1.赛题简介 1.1.赛题目标 1.2.地图介绍 1.3.规则介绍 2.环境介绍 2.1.观测空间(Observation Space) 2.1.1.原始数据: 2.1.2.特征数据 2.1.3.特征提取 2.2.动作空间(Action Space) 2.3.坐标介绍&#xf…