知行编程网知行编程网  2022-12-29 03:30 知行编程网 隐藏边栏  11 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python Process创建进程(2种方法)详解的相关知识,包括一个被创建的进程包括,以及python process finished with这些编程知识,希望对大家有参考作用。

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

虽然使用os.fork()方法可以启动多个进程,但是这种方法显然不适用于Windows,而Python是跨平台的语言,所以Python一定不能局限于Windows系统,所以Python也提供了其他的方法.下新建进程。

Python 在 multiprocessing 模块下提供了 Process 来创建新的进程。与Thread类似,使用Process创建新进程有两种方式:

以指定函数作为 target,创建 Process 对象即可创建新进程。

继承Process类,并重写其run()方法创建一个进程类,程序创建一个Process子类的实例作为进程。

Process 类也有如下类似的方法和属性:

run():重写该方法可实现进程的执行体。

start():该方法用于启动进程。

join([timeout]):这个方法类似于线程的join()方法。当前进程必须等待加入的进程执行完毕才能继续向下。

name:该属性用于设置或访问进程的名字。

is_alive():判断进程是否还活着。

daemon:该属性用于判断或设置进程的后台状态。

pid:返回进程的 ID。

authkey:返回进程的授权 key。

terminate():中断该进程。

以指定函数作为target创建新进程

下面先介绍以指定函数作为 target 来创建新进程。

import multiprocessing
import os

# 定义一个普通的action函数,该函数准备作为进程执行体
def action(max):
    for i in range(max):
        print("(%s)子进程(父进程:(%s)):%d" %
            (os.getpid(), os.getppid(), i))
if __name__ == '__main__':
    # 下面是主程序(也就是主进程)
    for i in range(100):
        print("(%s)主进程: %d" % (os.getpid(), i))
        if i == 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对象。

运行上面的程序,可以看到程序中运行了3个进程,1个主进程和2个由程序启动的子进程。由于程序中调用了mp2.join(),所以主进程必须等待mp2进程完成后才能向下进行。

继承Process类创建子进程

继承 Process 类创建子进程的步骤如下:

定义一个继承自Process的子类,重写其run()方法,准备作为流程执行体。

创建 Process 子类的实例。

调用 Process 子类的实例的 start() 方法来启动进程。

下面程序通过继承 Process 类来创建子进程:

import multiprocessing
import os

class MyProcess(multiprocessing.Process):
    def __init__(self, max):
        self.max = max
        super().__init__()
    # 重写run()方法作为进程执行体
    def run(self):
        for i in range(self.max):
            print("(%s)子进程(父进程:(%s)):%d" %
                (os.getpid(), os.getppid(), i))
if __name__ == '__main__':
    # 下面是主程序(也就是主进程)
    for i in range(100):
        print("(%s)主进程: %d" % (os.getpid(), i))
        if i == 20:
            # 创建并启动第一个进程
            mp1 = MyProcess(100)
            mp1.start()
            # 创建并启动第一个进程
            mp2 = MyProcess(100)
            mp2.start()
            mp2.join()
    print('主进程执行完成!')

这个程序的结果与前面的程序大致相同,只是创建进程的方式略有不同。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享