一、开启进程的两种方式
方式一:
from multiprocessing import Process
import time
def task(name):
print('%s is running' %name)
time.sleep(3)
print('%s is done' %name)
# 在windows系统上,开启子进程的操作必须放到if __name__ == '__main__'的子代码中
if __name__ == '__main__':
p=Process(target=task,args=('egon',)) #Process(target=task,kwargs={'name':'egon'})
p.start() # 只是向操作系统发送了一个开启子进程的信号
print('主')
方式二:
from multiprocessing import Process
import time
class Myprocess(Process):
def __init__(self,name):
super().__init__()
self.name=name
def run(self):
print('%s is running' %self.name)
time.sleep(3)
print('%s is done' %self.name)
# 在windows系统上,开启子进程的操作必须放到if __name__ == '__main__'的子代码中
if __name__ == '__main__':
p=Myprocess('egon')
p.start() # 只是向操作系统发送了一个开启子进程的信号
print('主')
二、join方法
让主进程在原地等待,等待子进程运行完毕,不会影响子进程的执行
三、进程对象相关属性
进程pid:每一个进程在操作系统内都有一个唯一的id号,称之为pid
四、僵尸进程和孤儿进程
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
五、守护进程:本质就是一个'子进程',该'子进程'的生命周期<=被守护进程的生命周期
六、互斥锁
用mutex.acquire()方法实现并发下的串行的效果