进程间全局变量互不干扰
方式一:创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动
from multiprocessing import Process
import os
#创建进程
p = Process(target=run_proc,args=('arg1','arg2'))
#target指定创建的子进程要执行的任务函数,args为执行函数的参数,可以是元组,也可以是列表
#p = Process(target=run_proc,args=['arg1','arg2'])
#启动子进程
p.start()
#获取进程的name属性
print(p.name)
#获取进程的pid属性
print(p.pid)
#进程是否存活.is_alive()方法,返回True或False
print(p.is_alive())
#终止进程.terminate()
p.terminate()
#让父进程等待子进程
p.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
class ProcessSon(Process):
def __init__(self,interval):
#因为Process类本身也有__init__方法,这个子类相当于重写了这个方法,
#但这样就会带来一个问题,我们并没有完全的初始化一个Process类,所以就不能使用从这个类继承的一些方法和属性,
#最好的方法就是将继承类本身传递给Process.__init__方法,完成这些初始化操作
Process.__init__(self)
self.interval = interval
def run(self):
print(self.interval)
if __name__ == '__main__':
p = ProcessSon(3)
#对一个不包含target属性的Process类执行start()方法,就会运行这个类中的run()方法
p.start()
p.join()