一、进程的使用
1.导入进程模块:import multiprocessing
(1)Process进程类的语法结构
Process([group[,target[,name[,args[,kwargs]]]]])
group:指定进程组,目前只能使用None
target:执行的目标任务名(一般为执行的函数名)
name:进程名
args:以元组方式给执行任务传参(元组方式给执行函数传参)
kwargs:以字典方式给执行任务传参(字典方式给执行函数传参)
(2)Process创建的实例对象常用方法
start():启动子进程实例(创建子进程)
join([timeout]):是否等待子进程执行结束,或等待多少秒
terminate():不管任务是否完成,立即终止子进程
(3)Process创建的实例对象常用属性
name:当前进行的别名,默认为Process-N,N为从1开始递增的整数
pid:当前进程的pid(进程号)
2.多进程完成多任务示例
(1)代码
import multiprocessing
import time
def run_process():
"""子进程要执行的代码"""
while True:
print("-------2---------")
time.sleep(1)
if __name__ == '__main__':
# 创建子进程
sub_process = multiprocessing.Process(target=run_process)
# 启动子进程
sub_process.start()
while True:
print("-----1-------")
time.sleep(1)
(2)结果
3.获取进程pid
(1)代码
import multiprocessing
import os
def work():
# 获取当前进程
current_process = multiprocessing.current_process()
print("目前正在工作的进程:", current_process)
# 获取当前进程id,用os模块获取当前进程,显示应一致
print("当前工作进程号:", current_process.pid, os.getpid())
# 获取父进程号
print("父进程号:", os.getppid())
if __name__ == '__main__':
# 获取当前主进程
main_process = multiprocessing.current_process()
print("主进程:", main_process)
print("主进程号:", main_process.pid)
# 开启一个子线程
sub_process = multiprocessing.Process(target=work)
sub_process.start()
# sub_process.join() 有join函数,下面的print函数会在最后打印,即等待子进程全部结束再继续执行
print("主进程结束")
(2)结果
4.带有参数的进程
(1)代码
import multiprocessing
def user_info(name,age):
print(name, age)
current_process = multiprocessing.current_process()
print("当前运行的进程:", current_process.name)
print("当前运行的进程号:", current_process.pid)
if __name__ == '__main__':
# 创建并开启子进程一,传参方式一:元组传参
sub_process = multiprocessing.Process(target=user_info, name="sub_process", args=("suner", 20))
sub_process.start()
# 创建并开启子进程二,传参方式二:字典传参
sub_process_2 = multiprocessing.Process(target=user_info,name="sub_process_2", kwargs={"name":"sun", "age":19})
sub_process_2.start()
(2)结果