pip3 install multiprocessing
multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
Process类: 表示进程对象
group: 一般设置none
target: 一个函数或方法的名字
args: 以元组的方式给执行任务传参
kwargs: 以字典的形式给执行任务传参
创建实例对象后常用方法:
start(): 启动子进程
join(): 等待子进程出结果
terminate(): 不管是否完成,立即终止子进程
import multiprocessing #导入进程包
import time
def dance():
for i in range(3);
print("跳舞中...")
time.sleep(0.2)
def sing():
for i in range(3);
print("唱歌中...")
time.sleep(0.2)
dance_process = multiprocessing.Process(target=dance)
dance_process.start()
sing()
# 自己手动创建的进程叫做子进程
运行结果:
跳舞中…
唱歌中…
跳舞中…
唱歌中…
跳舞中…
唱歌中…
用来验证主进程和子进程的编号,可以得知子进程是哪个主进程创建出来的,如果子进程的父进程正好是主进程的编号,那么这个进程是主进程创建的。
import multiprocessing #导入进程包
import time
import os
#获取当前主进程编号
#查看当前代码是哪个进程执行的
def dance():
dance_process_id = os.getpid()
dance_parent_process_id = os.getppid() print("dance_process_id:",dance_process_id,multiprocessing.current_ process())
for i in range(3);
print("跳舞中...")
time.sleep(0.2)
def sing():
sing_process_id = os.getpid()
sing_parent_process_id = os.getppid() print("sing_process_id:",sing_process_id,multiprocessing.current_ process())
for i in range(3);
print("唱歌中...")
time.sleep(0.2)
dance_process = multiprocessing.Process(target=dance,name="dance")
sing_process = multiprocessing.Process(target=sing,name="sing")
print(dance_process,sing_process)
如果得到的主进程与子进程的父进程相等,那么这个主进程创建了这两个子进程。
for i in range(3);
print("跳舞中...")
time.sleep(0.2)
os.kill(dance_process_id,9)
#杀死进程
args 元组方式给执行任务传参
kwargs 字典方式给执行任务传参
import multiprocessing
# 显示信息的任务
def show_info(name,age):
print(name,age)
# 创建子进程
sub_process = multiprocessing.Process(target=show_info,args=(20,"cc"))
sub_process.start()
import multiprocessing
# 显示信息的任务
def show_info(name,age):
print(name,age)
# 创建子进程
sub_process = multiprocessing.Process(target=show_info,kwargs={"age":20,"name":'cc'})
sub_process.start()
进程之间不共享全局变量
import multiprocessing
import time
g_list = list()
# 定义全局变量列表
def add_data():
for i in range(3) # 列表是可变类型,所以可以在原有内存的基础上修改数据,并且内存地址不变
g_list.append(i)
print("add:",i)
time.sleep(0.2)
# 添加数据的子进程
def read_data():
print("read:",g_list)
add_process = multiprocessing.Process(target=add_data)
read_process = multiprocessing.Process(target=read_data)
# 启动进程执行的对应任务
add_process.start()
add_process.join() # 这时候需要等待添加完成再继续往下执行
read_process.start()
import multiprocessing
import time
def task():
for i in range(10):
print("任务执行中...")
time.sleep(0.2)
# 判断是否是直接执行的模块,也就是程序入口模块
# 标准python写法,需要加上判断是否失主模块的代码
if __name__ == '__main__':
# 创建子进程
sub_process = multiprocessing.Process(target=task)
sub_process.start()
# 主进程延迟0.5s
time.sleep(p.5)
print('over')
结论:主进程等待所有子进程结束在结束
解决办法:1、让子进程守护主进程,主进程退出子进程销毁 2、退出主进程之间,先让子进程销毁
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.