码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-08-29 11:21:25      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:程序启动   程序   ESS   key   编程   就是   准备   ssi   tip   

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

  1. 以指定函数作为 target,创建 Process 对象即可创建新进程。
  2. 继承 Process 类,并重写它的 run() 方法来创建进程类,程序创建 Process 子类的实例作为进程。


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

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

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

        join([timeout]):该方法类似于线程的 join() 方法,当前进程必须等待被 join 的进程执行完成才能向下执行。

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

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

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

        pid:返回进程的 ID。

        authkey:返回进程的授权 key。

        terminate():中断该进程。

 

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(主进程执行完成!)

可以发现和之前创建多线程似乎是同样的过程和方法,只是这里用到的是  multiprocessing.Process ,运行上面程序,可以看到程序中运行了三个进程,一个主进程和程序启动的两个子进程。由于程序中调用了 mp2.join(),因此主进程必须等 mp2 进程完成后才能向下执行。

继承Process类创建子进程

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

        1.定义继承 Process 的子类,重写其 run() 方法准备作为进程执行体。

        2.创建 Process 子类的实例。

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

 

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(主进程执行完成!)

通常,推荐使用第一种方式来创建进程,因为这种方式不仅编程简单,而且进程直接包装 target 函数,具有更清晰的逻辑结构。

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

标签:程序启动   程序   ESS   key   编程   就是   准备   ssi   tip   

原文地址:https://www.cnblogs.com/jzxs/p/11428467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!