python 并发编程 多线程与多进程的区别
1.开进程的开销远大于开线程
2 同一进程内的线程共享该进程的数据,进程之间地址空间是隔离的
1 开进程的开销远大于开线程
from multiprocessing import Process def work():
print('hello') if __name__ == '__main__':
#在主进程下开启子进程
p = Process(target=work)
p.start()
print('主进程') '''
主进程
hello
'''
执行结果如下,p.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程
先打印的是主进程
from threading import Thread def work():
print('hello') if __name__ == '__main__':
t = Thread(target=work)
t.start()
print('主线程') '''
hello
主线程
'''
执行结果如下,几乎是t.start ()的同时就将线程开启了,然后先打印出了hello,开线程不用申请内存空间,证明线程的创建开销极小
2 同一进程内的线程共享该进程的数据?
1、进程之间地址空间是隔离的
from multiprocessing import Process def work():
global n
n = 0 if __name__ == '__main__':
n = 100
p = Process(target=work)
p.start()
p.join()
print('主', n) '''
主 100
'''
执行结果如下,毫无疑问子进程p已经将自己的全局的n改成了0,但改的仅仅是它自己的,查看父进程的n仍然为100,
子进程不影响主进程 2、同一进程内开启的多个线程是共享该进程地址空间的
# 2 同一进程内的多个线程共享该进程的地址空间 from threading import Thread def work():
global n
n = 0 if __name__ == '__main__':
n = 100
t = Thread(target=work)
t.start()
t.join()
print('主',n) '''
主 0
'''
执行结果如下, 查看结果为0, 因为同一进程内的线程之间共享进程内的数据
三 pid
1.开多个进程,每个进程都有不同的pid
current_process 可以查看pid
# 3 pid from multiprocessing import Process
from multiprocessing import current_process # current_process 可以查看pid def work(name):
print("%s" %name,current_process().pid) # 当前子进程id if __name__ == '__main__': p = Process(target=work, args=("子进程",))
p.start()
print('主', current_process().pid) # 主进程id '''
主 5880
子进程 5092
'''
os模块查看pid
from multiprocessing import Process
import os def work():
print("子进程:%s , 父进程:%s" %(os.getpid(), os.getppid())) # 子进程pid if __name__ == '__main__': p = Process(target=work)
p.start()
print('主', os.getpid()) # 主进程pid '''
主 15420
子进程:17024 , 父进程:15420
'''
2.在主进程下开启多个线程,每个子线程都跟主进程的pid一样
他们同属一个进程
# 3 pid from threading import Thread
import os def work():
print("子线程PID:%s" %(os.getpid())) # 子线程pid if __name__ == '__main__': t = Thread(target=work)
t.start()
print('主', os.getpid()) # 主线程pid '''
子线程PID:4328
主 4328
'''
python 并发编程 多线程与多进程的区别的更多相关文章
- python 并发编程 多线程 目录
线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多 ...
- python并发编程&多线程(一)
本篇理论居多,实际操作见: python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...
- python并发编程&多线程(二)
前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...
- 第十章:Python高级编程-多线程、多进程和线程池编程
第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...
- Python并发编程一(多进程)
1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...
- Python并发编程系列之多进程(multiprocessing)
1 引言 本篇博文主要对Python中并发编程中的多进程相关内容展开详细介绍,Python进程主要在multiprocessing模块中,本博文以multiprocessing种Process类为中心 ...
- Python并发编程——多线程与协程
Pythpn并发编程--多线程与协程 目录 Pythpn并发编程--多线程与协程 1. 进程与线程 1.1 概念上 1.2 多进程与多线程--同时执行多个任务 2. 并发和并行 3. Python多线 ...
- python并发编程——多线程
编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程 1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...
- python并发编程中的多进程(代码实现)
一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...
随机推荐
- 【leetcode】1232. Check If It Is a Straight Line
题目如下: You are given an array coordinates, coordinates[i] = [x, y], where [x, y] represents the coord ...
- C# => 写法
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder ...
- head first 设计模式笔记1-策略模式:模拟鸭子
1.第一个设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起.该原则几乎是所有设计模式背后的精神所在. 这个原则的另一种思考方式:把会变化的部分取出并封装起来,以 ...
- JAVA 获取类名,函数名
获取以下获取方法所在函数的相关信息 1.获取当前函数名:Thread.currentThread().getStackTrace()[1].getMethodName(); 2.获取当前类名:Thre ...
- 51 Nod 一维战舰
1521 一维战舰 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 爱丽丝和鲍博喜欢玩一维战舰的游戏.他们在一行 ...
- 51 Nod 数字1的数量
1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的 ...
- [CF1172E]Nauuo and ODT:Link-Cut Tree
分析 lxl大毒瘤. 感谢Ouuan等CNOIER提供了这么好的比赛. 这里只是把官方题解复述一遍,可以直接去看官方题解:点我. 考虑将问题转化为对于每个颜色,求出没有经过这个颜色的节点的路径有多少条 ...
- 「WC 2007」剪刀石头布
题目链接 戳我 \(Solution\) 直接求很明显不太好求,于是考虑不构成剪刀石头布的情况. 我们现在假设一个人\(i\)赢了\(x\)场,那么就会有\(\frac{x*(x-1)}{2}\) 我 ...
- 微信小程序-获取当前位置
在 app.json 里面增加 permission 属性配置(小游戏需在game.json中配置): "permission": { "scope.userLocati ...
- [翻译]剖析C#中的异步方法
翻译自一篇博文,原文:Dissecting the async methods in C# 有些括号里的是译注或我自己的理解. 异步系列 剖析C#中的异步方法 扩展C#中的异步方法 C#中异步方法的性 ...