一些概念
并行 : 两个进程在同一时间点发生
并发 : 两个进程在同一时间间隔内运行
同步 : 某一个任务的执行必须依赖于另一个任务的返回结果
异步 : 某一个任务的执行,不需要依赖于另一个任务的返回,只需要告诉另一个任务一声
阻塞 : 程序因为类似于IO等待、等待事件等导致无法继续执行。
非阻塞:程序遇到类似于IO操作时,不再阻塞等待,如果没有及时的处理IO,就报错或者跳过等其他操作
第一种使用进程
- is_alive, 判断进程是否活着
- terminate 杀死进程
from multiprocessing import Process
import time
import os
# 第一种开启进程
def func1(i):
time.sleep(1)
print('这里是儿子进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(os.getpid(),os.getppid()))
if __name__ == '__main__':
p = Process(target=func1,args=(1,))
p.start()
print('这里是儿子进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(os.getpid(),os.getppid()))
第二种的使用
# 第二种的使用
class MyProcess(Process):
def __init__(self,name):
super(MyProcess,self).__init__()
self.name = name
def run(self):
print('这是以继承类的方式开启的子进程%d,他的名字是%s'% (os.getpid(),self.name))
if __name__ == '__main__':
p1= MyProcess('WURI')
p1.start()
守护进程的用法:p.daemon = True 和 p.join()
1.将p进程设置为守护进程,必须要在start之前设置
2.守护进程:不允许开启子进程
3.守护进程:跟随着父进程的代码执行结束,守护进程就结束
- 开启一个正常的子进程,父进程会等待子进程结束后,父进程也就是程序才结束
- p.join()# 是让主进程等待子进程执行完。 现象:主进程执行到这句话,主进程阻塞住,等待子进程执行
如何把父进程和子进程之间的关系变为同步或者异步? - 父进程执行join,就会变成同步,不执行join,父进程和子进程就是异步的关系
- join必须放在start()后边
def func():
for i in range(10):
time.sleep(1)
print('打印次:%d 当前时间是%s'% (i, time.strftime('%H:%M:%S')))
if __name__ == '__main__':
p = Process(target=func)
p.daemon = True
p.name = 'lou'
p.start()
# 是让主进程等待子进程执行完。
# 现象:主进程执行到这句话,主进程阻塞住,等待子进程执行
# p.join()
time.sleep(5)
print('进程名字:%',p.name)
print('是否是守护进程:%d',p.daemon)
print('我是主进程')
网友评论