- 新建 : 创建一个进程,获取资源的过程
-
- 终止 : 进程结束,释放资源的过程
-
线程与进程的区别可以归纳为以下4点:
对比维度 | 多进程 | 多线程 | 总结 |
---|---|---|---|
数据共享、同步 | 数据共享复杂,同步简单 | 数据共享简单,同步复杂 | 各有优劣 |
内存、CPU | 占用内存多,切换复杂,CPU利用率低 | 占用内存少,切换简单,CPU利用率高 | 线程占优 |
创建、销毁、切换 | 复杂,速度慢 | 简单,速度快 | 线程占优 |
编程、调试 | 编程简单,调试简单 | 编程复杂,调试复杂 | 进程占优 |
可靠性 | 进程间不会互相影响 | 一个线程挂掉将导致整个进程挂掉 | 进程占优 |
分布式 | 适用于多核、多机,扩展到多台机器简单 | 适合于多核 | 进程占优 |
进程与线程总结
- """
- multiprocessing
-
- 1.将需要新进程执行的事件封装为函数
-
- 2 .通过模块的Process类创建进程对象,关联函数
-
- 3 .通过进程对象调用start启动进程
-
- 4 .通过进程对象调用join回收进程资源
- """
- import multiprocessing as mp
- from time import sleep
-
- a = 1
-
- # 进程函数
- def fun():
- global a
- print("开始一个进程")
- sleep(2)
- a = 1000
- print("a = ",a)
- print("进程结束了,实际也没干啥")
-
- if __name__ == '__main__':
-
- # 创建进程对象
- p = mp.Process(target=fun) # 绑定函数 此时还没有创建进程
-
- # start启动进程 自动执行fun函数,作为一个进程执行
- p.start() # 此时进程才产生
-
- print("原有进程也干点事")
- sleep(3)
- print("原有进程其实也没干啥")
-
- # 回收进程
- p.join()
-
- print("a :",a) # a = 1
-
- """
- threading 创建线程演示
- """
- from threading import Thread
- from time import sleep
- import os
-
- a = 1 # 全局变量
-
- # 线程函数
- def music():
- for i in range(3):
- sleep(2)
- print(os.getpid(),"播放:黄河大合唱")
-
- global a
- print("a =",a)
- a = 1000
-
- # 创建线程对象
- t = Thread(target=music)
- t.start() # 启动线程 执行music
-
- for i in range(4):
- sleep(1)
- print(os.getpid(),"播放:葫芦娃")
-
- t.join() # 回收线程资源
-
- print("a:",a)"""
- threading 创建线程演示
- """
- from threading import Thread
- from time import sleep
- import os
-
- a = 1 # 全局变量
-
- # 线程函数
- def music():
- for i in range(3):
- sleep(2)
- print(os.getpid(),"播放:黄河大合唱")
-
- global a
- print("a =",a)
- a = 1000
-
- # 创建线程对象
- t = Thread(target=music)
- t.start() # 启动线程 执行music
-
- for i in range(4):
- sleep(1)
- print(os.getpid(),"播放:葫芦娃")
-
- t.join() # 回收线程资源
-
- print("a:",a)
-
- """
- 孤儿进程和僵尸进程演示
- """
- from multiprocessing import Process
- from time import sleep
- import os
- from signal import *
- def fun():
- print("这是一个子进程",os.getppid(),'---',os.getpid())
- sleep(3)
- print("注定成为孤儿进程", os.getppid(), '---', os.getpid())
- if __name__ == '__main__':
- signal(SIGCHLD,SIG_IGN) # 系统方法处理僵尸进程,所有子进程退出由系统处理
- p = Process(target=fun)
- p.start()
- p.join() # 防止僵尸产生
- # 大量工作进入死循环
- while True:
- pass
-
- * 尽量使用进程完成无阻塞的并发行为
-
- * 不使用c作为解释器 (Java C#)
-
- Guido的声明:<http://www.artima.com/forums/flat.jsp?forum=106&thread=214235>
-