函数方式–多进程示例
import multiprocessing as mp
import os, sys
# 含有参数的进程函数
def fun1(sec, name):
print("1{}".format(sec))
print("2{}".format(name))
print(os.getppid(), "--", os.getpid())
# 含有参数的进程函数
def fun2(sec, name):
# sys.exit("fun2 进程提前结束")
print("3{}".format(sec))
print("4{}".format(name))
print(os.getppid(), "--", os.getpid())
# 含有参数的进程函数
def fun3(sec, name):
print("5{}".format(sec))
print("6{}".format(name))
print(os.getppid(), "--", os.getpid())
if __name__ == '__main__':
# 三个进程 为了等待子进程
jobs = [] # 存放每个进程对象
for i in [fun1, fun2, fun3]:
# 两种传参方式:
# 第一种
# 元组位置传参 参数:daemon=True 子进程伴随父进程结束
# p = mp.Process(target=i, args=(1, 2)) # daemon=True) # 子进程伴随父进程结束
# 第二种
# 关键字传参
p = mp.Process(target=i,
args=(1,),
kwargs={"name": 2},) # daemon=True) # 子进程伴随父进程结束
# 将进程对象放入列表 为了等待子进程
jobs.append(p)
# 进程启动
p.start()
# 确保三个进程都结束 为了等待子进程
for i in jobs:
i.join()
print("三个进程结束")
# p.join([timeout])
# 功能:阻塞等待子进程退出
# 参数:最长等待时间
# 获取进程号是需要将下面代码放入函数中
# os.getpid()
# 功能: 获取一个进程的PID值
# 返回值: 返回当前进程的PID
# os.getppid()
# 功能: 获取父进程的PID号
# 返回值: 返回父进程PID
# sys.exit(info)
# 功能:退出进程
# 参数:字符串
# 表示退出时打印内容
类方式–自定义进程类
from multiprocessing import Process
from time import sleep
class MyProcess(Process):
def __init__(self, value):
self.value = value
super().__init__() # 调用父类的init
# 重写run 作为进程的执行内容
def run(self):
for i in range(self.value):
sleep(2)
print("自定义进程类。。。。")
if __name__ == '__main__':
p = MyProcess(3)
p.start() # 将 run方法作为进程执行