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 ...
随机推荐
- Acwing-96-奇怪的汉诺塔(递推)
链接: https://www.acwing.com/problem/content/description/98/ 题意: 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆 ...
- Django+BootstrapTable实现表格分页
models.py: from django.db import models # Create your models here. class Article(models.Model): titl ...
- shiro框架学习-6-Shiro内置的Filter过滤器及数据加解密
1. shiro的核心过滤器定义在枚举类DefaultFilter 中,一共有11个 ,配置哪个路径对应哪个拦截器进行处理 // // Source code recreated from a .c ...
- Java中接口与抽象类的异同
定义(以下是百度百科中的定义): Java接口:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具 ...
- 自动化登录QQ脚本
1.准备第三方包: py -3.6 -m pip install win32gui py -3.6 -m pip install Pywin32 py -3.6 -m pip install pyHo ...
- jquery visible 选择器 语法
jquery visible 选择器 语法 作用::visible 选择器选取每个当前是可见的元素.除以下几种情况之外的元素即是可见元素:设置为 display:none type="h ...
- 【杂题】[LibreOJ #6608] 无意识的石子堆【容斥原理】【FFT】
Description Solution 943718401=225*2^22+1 显然每行必须有两个,我们不妨枚举有k列有2个石子,那么有2(n-k)列有1个石子. \[Ans=\sum\limit ...
- HNOI2010 平面图判定(planar)
题目链接:戳我 我怎么知道平面图有这个性质?? 对于一个平面图,它的边数不超过点数的\(3n-6\) 所以可以直接把边数多的特判掉,剩下的图中边数和点数就是一个数量级的了. 因为这个图存在欧拉回路,所 ...
- Linux命令-文件管理(二)
Linux命令-文件管理(二) Linux gitview命令 Linux gitview命令用于观看文件的内容,它会同时显示十六进制和ASCII格式的字码. 语法:gitview [-bchilv] ...
- Spark译文(二)
PySpark Usage Guide for Pandas with Apache Arrow(使用Apache Arrow的Pandas PySpark使用指南) Apache Arrow in ...