Python并发编程:多线程与多进程的区别

news2025/2/27 14:32:37

一 谁的开启速度快

1. 在主进程下开启线程

1

2

3

4

5

6

7

8

9

from threading import Thread

def work():

    print("hello")

if __name__ == '__main__':

    = Thread(target=work)

    t.start()

    print("主线程/主进程")

  执行结果如下:几乎是t.start()的同时就将线程开启了,然后先打印出了hello,证明线程的创建开销极小

1

2

hello

主线程/主进程

2、在主进程下开启子进程

1

2

3

4

5

6

7

8

9

10

11

from multiprocessing import Process

def work():

    print('hello')

if __name__ == '__main__':

    # 在主进程下开启子进程

    = Process(target=work)

    p.start()

    print('主线程/主进程')

  执行结果如下:p.start()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程

1

2

主线程/主进程

hello

  

二  瞅一瞅pid?

1、在主进程下开启多个线程,每个线程都跟主进程的pid一样

1

2

3

4

5

6

7

8

9

10

11

12

13

from threading import Thread

import os

def work():

    print('hello', os.getpid())

if __name__ == '__main__':

    p1 = Thread(target=work)

    p2 = Thread(target=work)

    p1.start()

    p2.start()

    print('主线程/主进程', os.getpid())

执行结果

1

2

3

hello 28818

主线程/主进程 28818

hello 28818

    

2、开多个进程,每个进程都有不同的pid

1

2

3

4

5

6

7

8

9

10

11

12

13

from multiprocessing import Process

import os

def work():

    print('hello', os.getpid())

if __name__ == '__main__':

    p1 = Process(target=work)

    p2 = Process(target=work)

    p1.start()

    p2.start()

    print('主线程/主进程', os.getpid())

  执行结果

1

2

3

主线程/主进程 28932

hello 28933

hello 28934

  

三 同一进程内的线程共享该进程的数据?

1、进程之间地址空间是隔离的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from multiprocessing import Process

import os

def work():

    global n

    = 0

     

if __name__ == '__main__':

    = 100

    = Process(target=work)

    p.start()

    p.join()

    print('主', n)

  执行结果如下:毫无疑问子进程p已经将自己的全局的n改成了0,但改的仅仅是它自己的,查看父进程的n仍然为100

1

主 100

2、同一进程内开启的多个线程是共享该进程地址空间的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from threading import Thread

import os

def work():

    global n

    = 0

if __name__ == '__main__':

    = 100

    = Thread(target=work)

    t.start()

    t.join()

    print('主', n)

  执行结果如下:查看结果为0,因为同一进程内的线程之间共享进程内的数据

1

主 0

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

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

相关文章

十分钟三个步骤给百万级数据Excel多人同时导出添加排队导出功能,避免干崩服务器

业务场景 考虑到数据库数据日渐增多,导出会有全量数据的导出(甚至有的时候数据百万级),多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所…

算法day02_209.长度最小的子数组

推荐阅读 从零开始学数组:深入浅出,带你掌握核心要点 初探二分法 再探二分法 目录 推荐阅读209.长度最小的子数组题目思路解法暴力解法队列相加法(滑动窗口)对列相减法(滑动窗口) 系统的纪录一下刷算法的过…

特斯拉一面算法原题

来自太空的 X 帖子 埃隆马斯克(Elon Musk)旗下太空探索技术公司 SpaceX 于 2 月 26 号,从太空往社交平台 X(前身为推特,已被马斯克全资收购并改名)发布帖子。 这是 SpaceX 官号首次通过星链来发送 X 帖子&a…

Rocky Linux 运维工具yum

一、yum的简介 ​​yum​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包,自动处理依赖关系,方便快捷地管理系统上的软件。 二、yum的参数说明 1、install 用于在系统的上安装一个或多个软件包 2、seach 用…

React中使用useActive

1.引入 import { useActivate } from "react-activation";2.React Activation 在React中使用react-activation,其实就是类似于Vue中的keep-alive,实现数据的缓存; 源码: import { ReactNode, ReactNodeArray, Context, Component…

密码学在 Web3 钱包中的应用:私钥是什么?bitget钱包为例

在非对称加密演算法中,私钥是一串随机生成的数字,通常以十六进制数表示(也就是由0、1、2、3、4、5、6、7、8、9、a、b、c、d、e和f组成)。私钥生成后,这串数字被作为一个单向数学函数中的输入值,计算产生的…

python web框架fastapi模板渲染--Jinja2使用技巧总结

文章目录 1.jinja2模板1.1、jinja2 的变量1.1.1 列表类型数据渲染1.1.2 字典类型数据渲染 2. jinja2 的过滤器3. jinja2 的控制结构3.1、分支控制3.2、循环控制 1.jinja2模板 要了解jinja2,那么需要先理解模板的概念。模板在Python的web开发中⼴泛使⽤,…

Python多线程编程:深入理解threading模块及代码实战【第99篇—Multiprocessing模块】

Python多线程编程:深入理解threading模块及代码实战 在Python编程中,多线程是一种常用的并发编程方式,它可以有效地提高程序的执行效率,特别是在处理I/O密集型任务时。Python提供了threading模块,使得多线程编程变得相…

springboot 注解属性转换字典

1.注解相关功能实现 定义属性注解 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.vehicle.manager.core.serializer.DicSerializer;import java.lang.annotation.*;/*** a…

图神经网络实战——图论

图神经网络实战——图论 0. 前言1. 图属性1.1 有向图和无向图1.2 加权图与非加权图1.3 连通图非连通图1.4 其它图类型 2. 图概念2.1 基本对象2.2 图的度量指标2.2 邻接矩阵表示法 3. 图算法3.1 广度优先搜索3.2 深度优先搜索 小结系列链接 0. 前言 图论 (Graph theory) 是数学…

【深度学习:标记数据】为医生标记数据缓解疼痛

【深度学习:标记数据】为医生标记数据缓解疼痛 问题实验结果结论 我开始在物理学方面进行学术研究,但在第一年就退学了(抱歉,休学了)我的博士学位,并在定量金融领域做了很长一段时间。因此,在我…

从0到1实现五子棋游戏!!

Hello,好久不见宝子们,今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下: 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍: 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…

git的使用 -- 代码托管平台阿里云

准备工作:git下载,环境配置git config --global user.name/user.email (这个是注解不用加,这里是两行命令,前面相同/前后各是一个) 注册一个网站码云、阿里云等等创建远程仓库配置SSH公钥 生成公钥 ssh-ke…

流程图怎么画?只需这几步就可以搞定!

你在工作中有没有遇到过下面这些问题: 思维混乱,想快速厘清一个项目的逻辑; 想让客户轻松接受自己的设计构思/产品理念等; 产品流程总是百密一疏,经常遗漏了某种用户需求; 想让小伙伴们快速理解一件事&…

2019年下半年教师资格证考试《综合素质》(中学)题

2.吴老师在指导青年教师时说道:“我们是生物老师,自己就知道生物的多样性和保护这种多样性的重要,所以对各有所长的学生,我们可不能做一个把学生修剪得整整齐齐的园丁。”这种说法表明教师劳动具有( C)。 A…

JavaScript 基础学习笔记(五):函数、作用域、匿名函数

目录 一、函数 1.1 声明和调用 1.2 形参和实参 1.3 返回值 二、作用域 2.1 全局作用域 2.2 局部作用域 三、匿名函数 3.1 函数表达式 3.2 立即执行函数 一、函数 理解函数的封装特性,掌握函数的语法规则 1.1 声明和调用 函数可以把具有相同或相似逻辑的代…

女性力量崛起,三八妇女节5大品牌创意案例!

随着女性意识的觉醒,越来越多的女性正在看见、勇敢表达自己,并努力提升自己、且坚定地爱自己! 从近些年的三八妇女节主题活动中,我们能看到越来越多的品牌都在策划品牌、产品活动时,越来越注重聚焦女性成长、性别议题…

Shopify如何调取开放接口实现页面更新

Shopify提供了开放接口(API),使开发人员能够通过编程方式与Shopify平台进行交互,并实现页面的更新。通过调用API,您可以获取和更新商店的数据,包括产品、订单、顾客信息等。下面是使用Shopify开放接口实现页…

【GB28181】wvp-GB28181-pro修改分屏监控为16画面(前端)

引言 作为一个非前端开发人员,自己摸索起来比较费劲,也浪费了很多时间 由于实际开发中,可能预览的画面多于8个,而wvp目前只支持8画面 本文快速帮助开发者修改分屏监控为多画面。例如16画面,20画面等 文章目录 一、 预期效果展示16分割画面20分割画面二、 源码修改-前端修改…

CV论文--2024.2.28

source:CV论文--2024.2.28 1、StreamDiffusion: A Pipeline-level Solution for Real-time Interactive Generation 中文标题:StreamDiffusion: 一个用于实时交互生成的管道级解决方案 简介:我们介绍了StreamDiffusion,这是专为实时交互式图…