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

橘子海
橘子海
发布时间:2026-10-14| 5人浏览过
原创

本文详解Python中利用multiprocessing模块的Process类创建新进程的两种方法:直接实例化与继承子类。重点解析构造参数、run方法重写及__main__判断的必要性,对比两种方式的优劣,推荐直接使用Process类实例化方式。

前文已介绍通过 os.fork() 函数进行多进程编程,但该方式在 Windows 系统上无法使用。本节将讲解一种适用于 Windows 平台的 Python 多进程创建方案。

Python 的 multiprocessing 模块提供了 Process 类,专门用于在 Windows 环境下创建新进程。与 Thread 类创建多线程类似,使用 Process 类创建多进程主要有以下两种途径:

直接实例化 Process 类,从而创建一个新的进程对象;

继承 Process 类并创建子类实例,同样可以生成新进程。需要注意的是,继承 Process 的子类必须重写父类的 run() 方法。

此外,Process 类还包含若干常用属性和方法,具体如表 1 所示。

属性名或方法名 功能
run() 第 2 种创建进程的方式需要用到,继承类中需要对方法进行重写,该方法中包含的是新进程要执行的代码。
start() 和启动子线程一样,新创建的进程也需要手动启动,该方法的功能就是启动新创建的线程。
join([timeout]) 和 thread 类 join() 方法的用法类似,其功能是在多进程执行过程,其他进程必须等到调用 join() 方法的进程执行完毕(或者执行规定的 timeout 时间)后,才能继续执行;
is_alive() 判断当前进程是否还活着。
terminate() 中断该进程。
name属性 可以为该进程重命名,也可以获得该进程的名称。
daemon 和守护线程类似,通过设置该属性为 True,可将新建进程设置为“守护进程”。
pid 返回进程的 ID 号。大多数操作系统都会为每个进程配备唯一的 ID 号。

表 1 Python Process类常用属性和方法

下文将对上述两种创建进程的方法进行详细解析。

通过Process类创建进程

与使用 thread 类创建子线程的方式相似,实例化 Process 类本质上就是调用其构造方法来创建新进程。Process 类的构造方法语法如下:


def __init__(self,group=None,target=None,name=None,args=(),kwargs={})

各参数具体含义如下:

  • group:该参数尚未实现,通常无需传递;
  • target:指定新进程要执行的目标函数;
  • name:为新进程指定名称;
  • args:以非关键字参数形式向 target 指定的函数传递参数;
  • kwargs:以关键字参数形式向 target 指定的函数传递参数。

以下代码演示了如何使用 Process 类创建新进程。


from multiprocessing import Process
import os
print("当前进程ID:",os.getpid())
# 定义一个函数,准备作为新进程的 target 参数
def action(name,*add):
 print(name)
 for arc in add:
  print("%s --当前进程%d" % (arc,os.getpid()))
if __name__=='__main__':
 #定义为进程方法传入的参数
 my_tuple = ("http://jb51.net/python/",\
    "http://jb51.net/shell/",\
    "http://jb51.net/java/")
 #创建子进程,执行 action() 函数
 my_process = Process(target = action, args = ("my_process进程",*my_tuple))
 #启动子进程
 my_process.start()
 #主进程执行该函数
 action("主进程",*my_tuple)

程序运行输出如下: 当前进程ID: 12980 主进程 http://jb51.net/python/ --当前进程12980 http://jb51.net/shell/ --当前进程12980 http://jb51.net/java/ --当前进程12980 当前进程ID: 12860 my_process进程 http://jb51.net/python/ --当前进程12860 http://jb51.net/shell/ --当前进程12860 http://jb51.net/java/ --当前进程12860

需要特别注意的是,在使用 multiprocessing.Process 创建并启动进程时,代码必须包含 if __name__=='__main__': 判断语句,否则在 Windows 上运行会抛出异常。

该程序包含两个进程:主进程和新建的子进程。主进程会执行整个脚本,而子进程不会执行 if __name__ == '__main__' 块内的代码,而是先执行该判断语句之外的所有可执行代码,随后再执行通过 target 参数指定的任务函数。

通过Process继承类创建进程

与创建 thread 子类类似,除了直接使用 Process 类,还可以通过继承 Process 类来创建进程。

在创建 Process 子类时,必须在子类中重写 run() 方法。该方法的作用相当于第一种方式中 target 参数所指向的函数。

此外,通过 Process 子类创建进程的流程与直接使用 Process 类相同:先创建实例对象,再调用 start() 方法启动进程。以下代码演示了如何通过 Process 子类创建进程。


from multiprocessing import Process
import os
print("当前进程ID:",os.getpid())
# 定义一个函数,供主进程调用
def action(name,*add):
 print(name)
 for arc in add:
  print("%s --当前进程%d" % (arc,os.getpid()))
#自定义一个进程类
class My_Process(Process):
 def __init__(self,name,*add):
  super().__init__()
  self.name = name
  self.add = add
 def run(self):
  print(self.name)
  for arc in self.add:
   print("%s --当前进程%d" % (arc,os.getpid()))
if __name__=='__main__':
 #定义为进程方法传入的参数
 my_tuple = ("http://jb51.net/python/",\
    "http://jb51.net/shell/",\
    "http://jb51.net/java/")
 my_process = My_Process("my_process进程",*my_tuple)
 #启动子进程
 my_process.start()
 #主进程执行该函数
 action("主进程",*my_tuple)

程序运行输出如下: 当前进程ID: 22240 主进程 http://jb51.net/python/ --当前进程22240 http://jb51.net/shell/ --当前进程22240 http://jb51.net/java/ --当前进程22240 当前进程ID: 18848 my_process进程 http://jb51.net/python/ --当前进程18848 http://jb51.net/shell/ --当前进程18848 http://jb51.net/java/ --当前进程18848

显然,该程序的运行结果与前一个程序大致相同,区别仅在于创建进程的方式不同。 建议读者优先使用第一种方式创建进程,因为这种方式编程更简单,且进程直接包装 target 函数,逻辑结构更为清晰。

至此,关于Python Process创建进程的两种方法详解介绍完毕。如需了解更多Python Process创建进程相关内容,请搜索本站历史文章或继续浏览后续文章。感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。