学习笔记(24):Python网络编程并发编程-进程与线程的区别
立即学习:https://edu.csdn.net/course/play/24458/296438?utm_source=blogtoedu
线程与进程的区别:
1.消耗区别:进程>线程
1)进程运行结果
#进程运行
from multiprocessing import Process
def task(name):print("我是%s"%name)if __name__ == '__main__':p1 = Process(target=task,args=('子进程',))p1.start()print('主进程')
进程运行结果:
2)线程运行结果
from threading import Thread
def task(name):print("我是%s"%name)if __name__ == '__main__':p1 = Thread(target=task,args=('子线程',))p1.start()print('主线程')
线程运行结果:
3)分析:在两端代码中,除了模块的不一样,代码的顺序都是一样的,但是运行的结果的顺序是不一样的。进程运行中是主进程先打印再打印的子进程,这是因为新建一个进程需要申请内存空间时间较长,而线程恰恰相反。所以进程消耗大于线程。注:同一进程里面的线程是平级的,没有父线程子线程的说法,为了方便理解才说的。
2.地址共享问题:进程之间不共享,同一进程线程之间共享
1)线程之间
from threading import Thread
n = 100
def task(name):
#声明全局变量,并且修改了n的值global nn = 0print("我是%s"%name)if __name__ == '__main__':#开启了一个新的线程,会改变n的值t1 = Thread(target=task,args=('子线程',))t1.start()print('主线程','n=%s'%n)#由于主线程和子线程之间是共享地址空间的即数据,所以线程n的改变也会共享到主线程中
#在主进程下运行了一个主线程和一个子线程(新建的线程)
线程运行结果:
2)进程运行
from multiprocessing import Process
n = 100
def task(name):global nn = 0print("我是%s"%name)if __name__ == '__main__':#开启了一个新的进程p1 = Process(target=task,args=('子进程',))p1.start()print('主进程','n=%s'%n)
#在新的进程中,n的值已经被改变成了0,在主进程中进行n的值的打印,得到的是全局变量n=100,说明进程之间的数据是不共享的,其值的改变包含影响到其他进程值
进程运行结果:
3.pid
查看当前进程pid的方法:
1)multiprocessing.current_process().pid
2)os.getpid()
查看当前进程ppid()的方法:父进程pid
os.getppid()
不同进程pid
from multiprocessing import Process,current_process
n = 100
def task(name):global nn = 0print("我是%s"%name,current_process().pid)if __name__ == '__main__':#开启了一个新的线程p1 = Process(target=task,args=('子进程',))p1.start()print('主进程','n=%s'%n,current_process().pid)
子进程的pid与父进程pid不同
不同线程pid
from threading import Thread
import os
n = 100
def task(name):global nn = 0print("我是%s"%name,os.getpid())if __name__ == '__main__':#开启了一个新的线程t1 = Thread(target=task,args=('子线程',))t1.start()print('主线程','n=%s'%n,os.getpid())
#在主进程下运行了一个主线程和一个子线程(新建的线程)
不同线程pid一样
学习笔记(24):Python网络编程并发编程-进程与线程的区别相关推荐
- 学习笔记(二十二)—— 了解进程和线程
文章目录 一.进程 1.1.什么是程序 1.2.了解进程 1.3.进程的三种状态 1.4.多进程 二.线程 2.1.了解线程 2.2.了解多线程 2.3.进程与线程的区别 2.4.多线程实现 2.5. ...
- 学习笔记(19):Python网络编程并发编程-互斥锁
立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...
- 学习笔记(34):Python网络编程并发编程-异步调用与回调机制
立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu 1.知识点:(详细见代码注释) 1)同步调用: res1 ...
- 学习笔记(33):Python网络编程并发编程-进程池线程池
立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...
- 学习笔记(28):Python网络编程并发编程-死锁与递归锁
立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...
- 学习笔记(18):Python网络编程并发编程-守护进程
立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...
- 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现
立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...
- 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务
立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...
- 学习笔记(35):Python网络编程并发编程-协程(yield,greenlet,gevent模块)
立即学习:https://edu.csdn.net/course/play/24458/296457?utm_source=blogtoedu 协程(yield,greenlet,gevent) 1. ...
最新文章
- python cmdb资产_SuperCMDB - 资产管理+跳板审计
- kvm虚拟服务器备份,OpenStack KVM虚拟机实例磁盘的备份脚本
- html css常用样式
- 用 Python 在朋友圈中游遍全球
- 人工智能实战_第七次作业_杨佳宁(2)
- 【转载】 quartus中调用modelsim仿真的方法
- [JavaWeb-Bootstrap]Bootstrap快速入门
- 新浪微博客户端(26)-添加转发评论工具条
- CAD插件学习系列教程(七) 去除CAD教育版戳记 (两种方法)
- 操作系统启动后 计算机处于 模式,电脑开机出现选择操作系统。怎么办?
- react 工程启动运行时,报错Content not from webpack is served from ...
- Flash--提高flash的使用寿命(1)
- Host文件位置和作用介绍
- 有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有10只小白鼠和一星期的时间,如何检验出那个瓶子里有毒药?
- 计算机毕业是先就业还是考研,先工作还是先考研?这些专业更适合先就业
- 在ANSYS WORKBENCH中使用APDL命令的例子
- Spark的spark-*和blockmgr-*目录里是什东西,怎么来的
- Qt应用程序图标设置任务栏图标设置
- 《Java入门从笨鸟到菜鸟》读后感(三)
- 2020最新版LaTeX软件教程---Tex live 2020的安装与使用