立即学习: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.什么是程序 1.2.了解进程 1.3.进程的三种状态 1.4.多进程 二.线程 2.1.了解线程 2.2.了解多线程 2.3.进程与线程的区别 2.4.多线程实现 2.5. ...

  2. 学习笔记(19):Python网络编程并发编程-互斥锁

    立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...

  3. 学习笔记(34):Python网络编程并发编程-异步调用与回调机制

    立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu 1.知识点:(详细见代码注释) 1)同步调用: res1 ...

  4. 学习笔记(33):Python网络编程并发编程-进程池线程池

    立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...

  5. 学习笔记(28):Python网络编程并发编程-死锁与递归锁

    立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...

  6. 学习笔记(18):Python网络编程并发编程-守护进程

    立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...

  7. 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现

    立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...

  8. 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务

    立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...

  9. 学习笔记(35):Python网络编程并发编程-协程(yield,greenlet,gevent模块)

    立即学习:https://edu.csdn.net/course/play/24458/296457?utm_source=blogtoedu 协程(yield,greenlet,gevent) 1. ...

最新文章

  1. python cmdb资产_SuperCMDB - 资产管理+跳板审计
  2. kvm虚拟服务器备份,OpenStack KVM虚拟机实例磁盘的备份脚本
  3. html css常用样式
  4. 用 Python 在朋友圈中游遍全球
  5. 人工智能实战_第七次作业_杨佳宁(2)
  6. 【转载】 quartus中调用modelsim仿真的方法
  7. [JavaWeb-Bootstrap]Bootstrap快速入门
  8. 新浪微博客户端(26)-添加转发评论工具条
  9. CAD插件学习系列教程(七) 去除CAD教育版戳记 (两种方法)
  10. 操作系统启动后 计算机处于 模式,电脑开机出现选择操作系统。怎么办?
  11. react 工程启动运行时,报错Content not from webpack is served from ...
  12. Flash--提高flash的使用寿命(1)
  13. Host文件位置和作用介绍
  14. 有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有10只小白鼠和一星期的时间,如何检验出那个瓶子里有毒药?
  15. 计算机毕业是先就业还是考研,先工作还是先考研?这些专业更适合先就业
  16. 在ANSYS WORKBENCH中使用APDL命令的例子
  17. Spark的spark-*和blockmgr-*目录里是什东西,怎么来的
  18. Qt应用程序图标设置任务栏图标设置
  19. 《Java入门从笨鸟到菜鸟》读后感(三)
  20. 2020最新版LaTeX软件教程---Tex live 2020的安装与使用

热门文章

  1. java环境变量设置与java查看安装路径
  2. c# streamReader转XmlDocument读取节点
  3. 【unity3d--初始学习五--c#脚本对xml文件的创建和解析】
  4. 第一个程序,Hello World
  5. Hadoop分布式系统的安装部署
  6. 关于浮动float属性和position:absolute属性的区别
  7. Hibernate逍遥游记-第2章-使用hibernate.properties
  8. 图像连通域标记算法研究
  9. bootstrap --- 鼠标停留提示事件
  10. Python 框架之Flask初步了解