Python Process创建进程(2种方法)详解

虽然使用 os.fork() 该方法可以启动多个过程,但显然不适合 Windows,而 Python 是跨平台语言,所以是跨平台语言 Python 不能局限于 Windows 系统,因此 Python 还提供了其他方法 Windows 创造新的过程。
Python 在 multiprocessing 在模块下提供 Process 创造新的过程。和 Thread 类似地,使用 Process 还有两种方法可以创造新的过程:
以指定函数为例 target,创建 Process 对象可以创建新的过程。
继承 Process 类,并重写它的 run() 创建过程类的方法,创建程序 Process 以子类实例为过程。
Process 类别也有以下类似的方法和属性:
run():重写这种方法可以实现过程的执行体。
start():该方法用于启动过程。
join([timeout]):这种方法类似于线程 join() 方法,当前的过程必须等待 join 只有在执行过程完成后才能向下执行。
name:该属性用于设置或访问过程的名称。
is_alive():判断过程是否还活着。
daemon:该属性用于判断或设置过程的背景状态。
pid:返回进程的 ID。
authkey:授权返回过程 key。
terminate():中断过程。
以指定函数作为target创建新过程
以下是指定函数的介绍 target 创造新的过程。
importmultiprocessing
importos
#将一个普通的action函数定义为进程执行体
defaction(max):
foriinrange(max):
print("(%s)子进程(父进程)(%s)):%d"%
(os.getpid(),os.getppid(),i))
if__name__=='__main__':
#以下是主程序(即主程序)
foriinrange(100):
print("(%s)主进程:%d"%(os.getpid(),i))
ifi==20:
#创建和启动第一个过程
mp1=multiprocessing.Process(target=action,args=(100,))
mp1.start()
#创建并启动第一个过程
mp2=multiprocessing.Process(target=action,args=(100,))
mp2.start()
mp2.join()
print('完成主流程执行!')在上述程序中排名第一 15、16 两行代码是程序创建和启动新过程的关键代码。不难发现,这两行代码与创建和启动新线程的代码几乎相同,但在这里创建的是 multiprocessing.Process 对象。
在运行上述程序时,您可以看到程序中有三个过程,一个主过程和两个子过程。因为程序调用了它 mp2.join()因此,主要过程必须等待 mp2 只有在流程完成后才能向下执行。
继承Process创建子过程
继承 Process 类创建子过程的步骤如下:
定义继承 Process 重写子类 run() 方法准备作为过程执行体。
创建 Process 子类实例。
调用 Process 子类的例子 start() 启动过程的方法。
以下程序通过继承 Process 类创建子进程:
importmultiprocessing
importos
classMyProcess(multiprocessing.Process):
def__init__(self,max):
self.max=max
super().__init__()
#重写run()作为执行过程的方法
defrun(self):
foriinrange(self.max):
print("(%s)子进程(父进程)(%s)):%d"%
(os.getpid(),os.getppid(),i))
if__name__='__main__':
#以下是主程序(即主程序)
foriinrange(100):
print("(%s)主进程:%d"%(os.getpid(),i))
ifi==20:
#创建和启动第一个过程
mp1=MyProcess(100)
mp1.start()
#创建和启动第一个过程
mp2=MyProcess(100)
mp2.start()
mp2.join()
print('完成主流程执行!')该程序的运行结果与上一个程序的运行结果大致相同,只是创建过程的方式略有不同。
