multiprocessing模块就是跨平台版本的多进程模块,提供了⼀个Process类来代表一个进程对象
创建⼦进程时,只需要传⼊⼀个执⾏函数和函数的参数,创建⼀个
Process实例,⽤start()方法启动 ,join()⽅法可以等待子进程结束后再继续运行
Process语法结构如下:
Process([group [, target [, name [, args [, kwargs]]]]])
target:表示这个进程实例所调用对象;
args:表示调用对象的位置参数元组;
kwargs:表示调用对象的关键字参数字典;
name:为当前进程实例的别名;
group:⼤多数情况下⽤不到;
Process类常⽤⽅法:
is_alive():判断进程实例是否还在执⾏;
join([timeout]):是否等待进程实例执行结束,或等待多少秒;
start():启动进程实例(创建子进程);
run():如果没有给定target参数,对这个对象调⽤start()方法时,就讲执行对象中的run()⽅法;
terminate():不管任务是否完成,立即终止;
Process类常⽤属性:
name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;
pid:当前进程实例的PID值;
from multiprocessing import Process(P必须大写
import os
import time
defsub_process_fun(num, a):
"""子进程执行的代码"""
print("子进程:pid=%d" % os.getpid())
print("子进程:num=%d" % num)
print("子进程:a=%d" % a)
for i in range(10):
print("子进程:hello")
time.sleep(0.1)
def main():
print("父进程:pid=%d" % os.getpid())
p = Process(target=sub_process_fun,args=(100,), kwargs={"a": 200})
# 创建一个子进程对象
p.start() # 真正的创建出子进程,子进程可以开始执行代码
print("父进程:hi")
print("父进程:子进程的名字 %s" % p.name)
print("父进程:子进程的pid %d" % p.pid)
print("父进程:子进程的状态 %s" % p.is_alive())
time.sleep(0.1)
p.terminate() # 终止子进程的执行 存在延迟
print("父进程:已经终止了子进程")
print("父进程:子进程的状态 %s" % p.is_alive())
p.join() # 回收子进程资源 阻塞
print("父进程:已经回收了子进程")
print("父进程:子进程的状态 %s" % p.is_alive())
print("父进程:结束")
if __name__ =='__main__':
main()