1 ,并行,并发 :
- 单核 cpu 的时期 :
早期,单核 cpu 的时期,没有并行的概念,只有并发 - 并行 : 多个形成独立工作
- 并发 : 微观上串行,宏观上并行
2 ,进程三种状态 :
- ready ( 就绪状态 ) : 获得了除 cpu 外的所有资源,只要货 cpu 时间片段,就可以立刻执行
- running ( 执行状态 ): 程序正在处理机上运行
- blocked ( 阻塞状态 ): 因为某些事件的发生,程序放弃了处理机,法务执行程序
3 ,同步,异步 :
- 同步 : 两个任务在同一条时间线上
- 异步 : 两个任务不再同一条时间线上
4 ,阻塞,非阻塞 :
是都卡住
5 ,进程号 : pid
os.getpid()
6 ,父子进程 : 谁调用了谁
# Author:SFL
from multiprocessing import Process
import os
def aa(n):
print("子进程 pid:%s"%(os.getpid()))
if __name__ == '__main__':
p = Process(target=aa,args=(1,))
p.start()
print("main进程 pid:%s"%(os.getpid()))
7 ,父进程表编号 :
os.getppid()
8 ,run ,start 区别 :
- start : 启动一个子进程
- run :普通函数。
- 因此,如果你想启动多进程,就必须使用start()方法。
9 ,进程名字 :
- 获取 :
p.name
- 设置 :
p = Process(target=aa,args=(1,),name="aa")
10 ,内置函数开进程 :
- 精华代码 :
p1 = Process(target=aa,args=("来将何人",))
p1.run()
- 全部代码 :
# Author:SFL
from multiprocessing import Process
def aa(s:str):
for i in range(1000):
print(s)
if __name__ == '__main__':
p1 = Process(target=aa,args=("来将何人",))
p2 = Process(target=aa,args=("你爹",))
p1.run()
p2.run()
11 ,继承方式开进程 :
# Author:SFL
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,v):
super(MyProcess, self).__init__()
self.v=v
def run(self):
for i in range(1000):
print(self.v)
if __name__ == '__main__':
p1 = MyProcess("对面谁上单")
p2 = MyProcess("你爹")
p1.start()
p2.start()
12 ,join ,子进程优先 :
- 理论 :
让主进程等待自己进程执行,子进程结束后,主进程猜中还行 - 精华代码 : p1 就是那个子进程
p1.join()
- 完整代码 :
if __name__ == '__main__':
p1 = MyProcess("对面谁上单")
p1.start()
p1.join()
for i in range(1000):
print("你爹")
- 应用场景 :
后面的进程需要前面的结果
13 ,进程是否活着 :
- 精华代码 :
p1.is_alive()
- 看到他活着 :
if __name__ == '__main__':
p1 = MyProcess("对面谁上单")
p2 = MyProcess("你爹")
p1.start()
p2.start()
print(p1.is_alive())
print(p2.is_alive())
- 看到他死了 :
if __name__ == '__main__':
p1 = MyProcess("对面谁上单")
p2 = MyProcess("你爹")
p1.start()
p2.start()
time.sleep(1)
print(p1.is_alive())
print(p2.is_alive())
14 ,杀掉进程 :
p1.terminate()
15 ,守护进程 :理论
- 独立 : 进程之间是互相独立的,主进程代码运行结束,守护进程随即终止。
- 创建 : 有主进程创建
- 运行 : 在后台运行
- 结束 : 守护进程会在主进程代码执行结束后就终止,否则抛出异常
- 绝育 : 守护进程内无法再开启子进程
- 子进程资格 : 只有子进程才可以成为守护进程
16 ,父子进程 : 子进程
- 理论 : 在进程中,开启的进程
- 代码 :
# Author:SFL
from multiprocessing import Process
from multiprocessing import process
import time
import os
def aa(s):
print("aa我的进程编号是:%s"%(os.getpid()))
print("aa我的爸爸编号是:%s"%(os.getppid()))
if __name__ == '__main__':
p = Process(target=aa,args=(1,))
p.start()
print("main我的进程编号是:%s"%(os.getpid()))
print("main我的爸爸编号是:%s"%(os.getppid()))
17 ,守护进程 : 代码
- 设置为守护进程 :
p.daemon(True)
- 是否为守护进程 :
p.daemon
- 完整代码 : 只看到 True ,因为守护进程在后台运行
# Author:SFL
from multiprocessing import Process
from multiprocessing import process
import time
import os
def aa(s):
for i in range(1000):
print("aa")
if __name__ == '__main__':
p = Process(target=aa,args=(1,))
p.daemon = True
p.start()
print(p.is_alive())