创建子进程
Process()类
参数:
target 指定要绑定的函数
name #给创建的进程起一个名字
args #给target 指定的函数传参,按位置传参,需要给args传入元组
kwargs #需要给一个字典,给target指定的函数按键值传参
#进程函数的使用
from multiprocessing import Process
from time import sleep
a=1
def worker(sec,msg):
#当worker作为子进程运行时,对全局变量a的修改只会影响在子进程中a的值,对父进程没有影响
global a
a=1000#在子进程修改了a的值,对父进程没有影响
for i in range(3):
sleep(sec)
print("the worker msg",msg)
print(a)
p=Process(name='worker',target=worker,args=(2,),kwargs={'msg':'Your are a big man'})
#name传字符串,target传函数,args传元组,把2赋值给形参sec,kwargs传字典,把m'msg'赋值给形参msg,形参名字与键名字一致;
p.start()
#进程名称:
print('进程名称:',p.name)
print("进程PID:",p.pid) #最常用的进程命令
print('进程状态:',p.is_alive())#只是显示当前状态:False,
p.join()
print('parent:',a)
Process类 进程对象:
属性方法:
启动子进程
start()#该句执行才是正常的创建子进程,而不是Process时创建
回收子进程:
join([timeout])
timeout #设置最长的阻塞事件,如果超过该时间还没有子进程退出则不再继续等待;
内核会帮助应用层记录子进程的退出情况,当使用join函数时内核会及时返回进程状态给应用层进行处理
p.daemon #默认值False,功能让父进程运行结束后,不会影响子进程的运行直到等待子进程运行结束再一起退出。如果设置其值为True,则主进程运行完毕则所有子进程不再运行,一起退出。
p.daemon 该属性的设置需要再start()前设置;
该属性的设置并不是将进程设置为linux或unix 中的守护进程;
例子:
import multiprocessing as mp
from time import sleep
def fun():
print("子进程开始")
sleep(3)
print("子进程结束")
p=mp.Process(target=fun) #创建一个进程对象
p.daemon=True #守护父进程,让子进程不再进行了。
p.start()
# p.join()
print('--------------------main process over--------------------')