Python学习笔记-简单案例实现多进程与多线程
Python 的多进程与多线程是并发编程的两种重要方式,用于提高程序的执行效率。它们各自有不同的特点和适用场景。
多进程(Multiprocessing)
概念:
多进程是指操作系统中同时运行多个程序实例,每个实例称为一个进程。每个进程都拥有独立的内存空间和系统资源。
特点:
- 独立性:每个进程拥有独立的内存地址空间,互不干扰。
- 稳定性:一个进程的崩溃不会影响其他进程的运行。
- 资源消耗:创建和切换进程的开销较大,因为需要为每个进程分配内存和其他系统资源。
- 数据共享:进程间通信(IPC)需要通过特定的机制来实现,如管道、消息队列、共享内存等。
适用场景:
- CPU 密集型任务,即计算密集型任务,适合使用多进程,因为可以利用多核 CPU 的并行计算能力。
- 需要高稳定性的场景,如服务器后端,一个进程的崩溃不会导致整个服务停止。
代码实现:
1.导包
2.创建进程对象
3.启动进程执行任务
源码:
import os
import time
import multiprocessing as mdef sing(num, name):print('子进程id', os.getpid())print('子进程的父id', os.getppid())for i in range(num):print('%s唱歌...%d次' % (name, i + 1))time.sleep(0.5)def dance(num, name):for i in range(num):print(f'{name}跳舞...')time.sleep(0.5)if __name__ == '__main__':"""target:指定执行函数名args:使用元组传参kwargs:使用字典传参"""print('主进程id', os.getppid())p = m.Process(target=sing, args=(3, '小明'))# 设置守护主进程,主进程结束,子进程不再执行p.daemon = Truep2 = m.Process(target=dance, kwargs={'num': 2, 'name': '小红'})p.start()p2.start()
多线程(Multithreading)
概念:
多线程是指在同一个进程中并发执行多个线程,共享进程的内存空间和系统资源。
特点:
- 共享性:线程间共享进程的内存空间和系统资源。
- 开销小:创建和切换线程的开销通常比进程小。
- 全局解释器锁(GIL):在 CPython 解释器中,由于全局解释器锁(GIL)的存在,多线程在 CPU 密集型任务中并不能实现真正的并行执行,只能实现并发。但在 I/O 密集型任务中,多线程可以有效提高程序的响应速度。
- 数据同步:多线程间共享数据可能导致数据不一致,因此需要使用锁、条件变量等同步机制来确保数据的正确性。
适用场景:
- I/O 密集型任务,如网络请求、文件读写等,多线程可以提高程序的响应速度和吞吐量。
- 需要共享数据的场景,多线程可以方便地访问和修改共享数据。
代码实现:
1.导包
2.创建线程对象
3.启动线程执行任务
源码:
import threading
import timedef sing(num):for i in range(num):print('唱歌...')time.sleep(0.2)
def dance(num):for i in range(num):print('跳舞...')time.sleep(0.2)if __name__ == '__main__':t1 = threading.Thread(target=sing,args=(3,),daemon=True)t2 = threading.Thread(target=dance,kwargs={'num':5})t1.start()t2.start()
总结
多进程和多线程各有优劣,选择哪种方式取决于具体的应用场景和需求。对于 CPU 密集型任务,通常使用多进程;对于 I/O 密集型任务或需要共享数据的场景,多线程可能更合适。在实际开发中,还可以考虑使用进程池和线程池来管理和控制并发数量,以提高系统的稳定性和性能。
相关文章:
Python学习笔记-简单案例实现多进程与多线程
Python 的多进程与多线程是并发编程的两种重要方式,用于提高程序的执行效率。它们各自有不同的特点和适用场景。 多进程(Multiprocessing) 概念: 多进程是指操作系统中同时运行多个程序实例,每个实例称为一个进程。…...
python常用的语法
Python是一种高级、通用、解释型的编程语言,具有简洁、易于阅读和理解的语法。以下是Python中常用的语法: 变量定义和赋值: variable value输出内容: print("Hello, World!")条件判断: if condition:# 条件…...
【计算机网络】概述
📝本文介绍 本文为计算机网络的概述,会综合概述一下计算机网络 👋作者简介:一个正在积极探索的本科生 📱联系方式:943641266(QQ) 🚪Github地址:https://github.com/sankexilianhua &…...
【Flink connector】文件系统 SQL 连接器:实时写文件系统以及(kafka到hive)实战举例
文章目录 一. 滚动策略:sink后文件切分(暂不关注)1. 切分分区目录下的文件2. 小文件合并 二. 分区提交1. 分区提交触发器 (什么时候创建分区)1.1. 逻辑说明1.2. 举例说明 2. 分区时间提取器 (用于partition-time情况下partition commit策略)2…...
RpcContext :提供了在 RPC 调用过程中访问当前调用信息的方法
在 Dubbo 中,RpcContext 是一个上下文对象,它提供了在 RPC 调用过程中访问当前调用信息的方法。RpcContext.getClientAttachment() 方法用于获取客户端设置的附件(Attachment)信息。这些附件信息通常是在 RPC 调用发起方ÿ…...
机器学习 - 提高模型 (代码)
如果模型出现了 underfitting 问题,就得提高模型了。 Model improvement techniqueWhat does it do?Add more layersEach layer potentially increases the learning capabilities of the model with each layer being able to learn some kind of new pattern in…...
数值代数及方程数值解:预备知识——二进制及浮点数
文章目录 二进制IEEE浮点数 本篇文章的前置知识:数学分析 二进制 命题:二进制转化为十进制 二进制的数字表示为 ⋯ b 2 b 1 b 0 . b − 1 b − 2 ⋯ \cdots b_2b_1b_0.b_{-1}b_{-2}\cdots ⋯b2b1b0.b−1b−2⋯这等价于十进制下的 ⋯ b 2 2 …...
新数字时代的启示:揭开Web3的秘密之路
在当今数字时代,随着区块链技术的不断发展,Web3作为下一代互联网的概念正逐渐引起人们的关注和探索。本文将深入探讨新数字时代的启示,揭开Web3的神秘之路,并探讨其在未来的发展前景。 1. Web3的定义与特点 Web3是对互联网未来发…...
算法——动态规划:01背包
原始01背包见下面这篇文章:http://t.csdnimg.cn/a1kCL 01背包的变种:. - 力扣(LeetCode) 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 简化一…...
写作类AI推荐(二)
本章要介绍的写作AI如下: 火山写作 主要功能: AI智能创作:告诉 AI 你想写什么,立即生成你理想中的文章AI智能改写:选中段落句子,可提升表达、修改语气、扩写、总结、缩写等文章内容优化:根据全文…...
分寝室(20分)(JAVA)
目录 题目描述 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: 输出样例 2: 题解: 题目描述 学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女…...
Spring 源码调试问题 ( List.of(“bin“, “build“, “out“); )
Spring 源码调试问题 文章目录 Spring 源码调试问题一、问题描述二、解决方案 一、问题描述 错误:springframework\buildSrc\src\main\java\org\springframework\build\CheckstyleConventions.java:68: 错误: 找不到符号 List<String> buildFolders List.of…...
Centos7安装RTL8111网卡驱动
方法一: // 安装pciutils # yum install -y pciutils // 查看pci设备信息 # lspci | grep -i Ethernet 09:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 03) // 上面看到是Re…...
吉时利KEITHLEY2460数字源表
181/2461/8938产品概述: Keithley 2460 高电流源表源测量单元 (SMU) 将先进的触摸、测试和发明技术带到您的指尖。Keithley 2460 将创新的图形用户界面 (GUI) 与电容式触摸屏技术相结合,使测试变得直观并最大限度地缩短学习曲线,从而帮助工程…...
数据库原理(含思维导图)
数据库原理笔记,html与md笔记已上传 1.绪论 发展历程 记住数据怎么保存,谁保存数据,共享性如何,独立性如何 人工管理阶段 数据不保存应用程序管理数据数据不共享数据不具有独立性 文件系统阶段 数据可以长期保存文件系统管…...
数据结构(六)——图
六、图 6.1 图的基本概念 图的定义 图:图G由顶点集V和边集E组成,记为G (V, E),其中V(G)表示图G中顶点的有限非空集;E(G) 表示图G中顶点之间的关系(边)集合。若V {v1, v2, … , vn},则用|V|…...
Android-AR眼镜屏幕显示
Android-AR眼镜 前提:Android手持设备 需要具备DP高清口 1、创建Presentation(双屏异显) public class MyPresentation extends Presentation {private PreviewSingleBinding binding;private ScanActivity activity;public MyPresentatio…...
蓝桥集训之货币系统
蓝桥集训之货币系统 核心思想:背包 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 30,M 10010;typedef long long LL;LL f[M];int w[N];int n,m;int main(){cin>>n>>m;for(int i1;i&…...
基于微信小程序的校园服务平台设计与实现(程序+论文)
本文以校园服务平台为研究对象,首先分析了当前校园服务平台的研究现状,阐述了本系统设计的意义和背景,运用微信小程序开发工具和云开发技术,研究和设计了一个校园服务平台,以满足学生在校园生活中的多样化需求。通过引…...
QT+Opencv+yolov5实现监测
功能说明:使用QTOpencvyolov5实现监测 仓库链接:https://gitee.com/wangyoujie11/qt_yolov5.git git本仓库到本地 一、环境配置 1.opencv配置 将OpenCV-MinGW-Build-OpenCV-4.5.2-x64文件夹放在自己的一个目录下,如我的路径: …...
【Python-Docx库】Word与Python的完美结合
【Python-Docx库】Word与Python的完美结合 今天给大家分享Python处理Word的第三方库:Python-Docx。 什么是Python-Docx? Python-Docx是用于创建和更新Microsoft Word(.docx)文件的Python库。 日常需要经常处理Word文档…...
吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.6-3.8
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.6 激活函数(Activation functions)3.7 为什么需要非线性激活函数?(why need a non…...
盘点最适合做剧场版的国漫,最后一部有望成为巅峰
最近《完美世界》动画官宣首部剧场版,主要讲述石昊和火灵儿的故事。这个消息一出,引发了很多漫迷的讨论,其实现在已经有好几部国漫做过剧场版,还有是观众一致希望未来会出剧场版的。那么究竟是哪些国漫呢,下面就一起来…...
Altium Designer许可需求分析
在电子设计的世界中,Altium Designer已成为设计师们的得力助手。然而,如何进行有效的许可需求分析,以确保软件的高效使用和企业的可持续发展?本文将带您了解如何进行Altium Designer的许可需求分析,让您在设计的道路上…...
[c++]类和对象常见题目详解
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
【c++】类和对象(五)赋值运算符重载
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章带大家认识赋值运算符重载,const成员,取地址及const取地址操作符重载等内容 目录 1.赋值运算符重载1.1运算符重载1.1.1特性&#…...
密码学基础-对称密码/公钥密码/混合密码系统 详解
密码学基础-对称密码/公钥密码 加解密说明1.加密解密必要因素加密安全性说明 什么是对称密码图示说明对称密码详解什么是DES?举例说明 什么是3DES什么是AES? 公钥密码什么是RSA? 对称密钥和公钥密码优缺点对比对称密码对称密码算法总结对称密码存在的问题? 公钥密码公钥密码…...
《装饰器模式(极简c++)》
本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 模式说明: 方案: 装饰类和派生类同根,然后装饰类中放一个派生类,以在接口不动的情况下增加功能优点: 可以灵活地扩展对象功能…...
Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能
文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,…...
实现一个Google身份验证代替短信验证
最近才知道公司还在做国外的业务,要实现一个登陆辅助验证系统。咱们国内是用手机短信做验证,当然 这个google身份验证只是一个辅助验证登陆方式。看一下演示 看到了嘛。 手机下载一个谷歌身份验证器就可以 。 谷歌身份验证器,我本身是一个基…...
asp做旅游网站毕业论文/备案域名出售平台
终于放寒假了,哈哈哈,然后,也不准备闲着吧,就是再熟悉一下旧的东西,然后把新的东西也拿来分享一下,自己也准备好了再这个寒假 好好的提高一下自己,哎,菜鸟一枚,真正去实…...
wordpress虚拟阅读/学电脑在哪里报名
深燃(shenrancaijing)原创作者 | 黎明编辑 | 魏佳2022年对于中国新造车是一个特殊的年份。这一年蔚小理交付了新车型,零跑去香港上了市,华为以问界之名造起了车,比亚迪超过特斯拉夺得销冠,曾经不被看好的哪…...
唐山网站建设策划方案/小红书关键词热度查询
1.1 创建信号量int semget( key_t key, //标识信号量的关键字,有三种方法:1、使用IPC——PRIVATE让系统产生, // 2、挑选一个随机数,3、使用ftok从文件路径名中产生 int nSemes, //信号量集中元素个数 int flag …...
网站正在建设中的素材动图/百度在线识别图片
目录 题目 思路 考点 Code 题目 已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 2*x+3*y+4 x$y = 3*x+y+2 1、其中x、y是无符号整数 2、地球人公式按C语言规则计算 3、火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算 现有一段火星人…...
常熟做公司网站/郑州关键词排名外包
本文转载自:http://blog.csdn.net/m13666368773/article/details/8060481 一.正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能…...
目前做美术的网站以及app/福州百度网站排名优化
A2D Framework增加了EF支持,加上原先支持ADO.NET: 支持EF方式支持ADO.NET方式这次来讲如何让Entity Framework变成nb的读写分离 1. 先设计EF模型, 可以图形方式设计,也可以数据库优先方式设计,总之设计完后,再转换成Co…...