概述
python是 面向对象 的编程语言,可以通过 类 实现创建子进程。
当 子进程 需要实现 复杂功能 时,像之前那样,只一个函数是很难实现的,如果通过若干的函数,又不够优雅,就需要通过 类 来实现。
使用方法
定义一个 类,继承Process类,重写run()方法,实例化 后调用 start() 方法 启动进程。
就会创建一个 子进程 ,执行 run() 方法。
例子1
本案例中,主进程模拟老师批改卷子,需要耗时较长时间,老师渴了,创建 子进程 模拟小明烧水、倒水,也需要耗时一段时间,期间老师 一直 在批改卷子
# coding=utf-8
from multiprocessing import Process
import time
class MyProcess(Process):
def run(self):
print('小明去烧水')
time.sleep(3)
print('小明倒水回来了')
if __name__ == "__main__":
print('老师批改卷子')
print('派小明去倒水')
p=MyProcess()
p.start()
for i in range(10):
print('老师继续批改卷子')
time.sleep(1)
例子2
本案例中,主进程模拟老师批改卷子,需要耗时较长时间,老师渴了,创建 子进程 模拟小明烧水、倒水,也需要耗时一段时间,期间老师 一直 等待,直到小明倒水回来后,才继续批改卷子
# coding=utf-8
from multiprocessing import Process
import time
class MyProcess(Process):
def run(self):
print('小明去烧水')
time.sleep(3)
print('小明倒水回来了')
if __name__ == "__main__":
print('老师批改卷子')
print('派小明去倒水')
p=MyProcess()
p.start()
print('喝不上水就不批卷子,哼!')
p.join()
for i in range(10):
print('老师继续批改卷子')
time.sleep(1)
例子3
#coding=utf-8
import time
from multiprocessing import Process
import os
#打印进程id,父进程id
print('文件开始---,pid=%d,ppid=%d'%(os.getpid(),os.getppid()))
#自定义类,继承Process类
class MyProcess(Process):
#重写Process类的run()方法
def run(self):
print('子进程开始,pid=%d,ppid=%d'%(os.getpid(),os.getppid()))
time.sleep(5)
print('子进程结束,pid=%d,ppid=%d'%(os.getpid(),os.getppid()))
#必须有下面这行代码,否则在windows下报错
if __name__ == "__main__":
#打印进程id
print('主进程开始,pid=%d,ppid=%d'%(os.getpid(),os.getppid()))
#创建进程
p=MyProcess()
#启动进程
p.start()
# time.sleep(10)
#子进程pid和name
print('子进程pid=%d,name=%s'%(p.pid,p.name))
print('主进程结束,pid=%d,ppid=%d'%(os.getpid(),os.getppid()))