news 2026/10/1 22:10:45

Python进程multiprocessing.Process()的使用解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python进程multiprocessing.Process()的使用解读

进程.()的使用解读

更新时间为2024年02月24日09点32分40秒, 该文章的作者是埃菲尔没有塔尖。

这篇文章主要是介绍了有关进程的使用方法, 其中内容具有很强的参照价值, 希望对广大读者朋友们能够带来切实的帮助, 倘若文章之中存在错误之处或者还有诸多没有考虑周全的地方, 还请网友们不要吝惜赐教, 进行批评指正。

1.进程概念

进程被划分为资源分配的最小的单位, 它是处于程序隔离的边界位置。

CPU是通过时间片轮转的机制, 在不同的时间段里面去切换执行不同的进程的, 但是切换进程这个操作是比较耗时的, 所以就引来了一个叫轻量级进程的东西, 也就是我们常说的线程, 一个进程中是包括多个线程的, 代码流其实就是说的进程中同时跑着的多个方法体。

2.进程的状态

在工作的过程中, 任务的总数量通常情况下是大于中央处理器的物理核心数量的, 这也就是说, 在某一个具体的时间点上,必然会出现一部分任务正在被实际执行, 而同时又有另外一部分任务处于等待状态, 以便后续能够占用到中央处理器来进行执行, 这一种客观存在的现实状况, 直接导致了系统中出现了多种不同的运行状态。

3.进程的创建-

模块指的是跨平台版本的多进程模块。该模块提供了一个类。这个类用于代表一个进程对象。我们可以把这个对象理解成是一个独立的进程。它能够用来执行另外的事情。

这个部分是关于进行方法说明的。

其实创建子进程与创建线程的操作过程非常相似, 具体做法是先把需要执行的函数以及相关的参数作为输入项传递进去, 然后生成一个具体的实例对象, 最后再调用其内部的start()这一特定方法来实现启动操作。

语法结构如下: ()

所建立出来的那个具体的东西, 它经常要用到的那些操作方式如下。

创建出来的这个实例对象, 它里面有一些常用的属性。

这里存在一个代码样例。

import multiprocessing

import time

def work1():

for i in range(10):

print("work1----", i)

time.sleep(0.5)

if __name__ == '__main__':

# 创建进程

# 1. 导入 multiprocessing 模块

# 2. multiprocessing.Process() 创建子进程

# 3. start() 方法启动进程

p1 = multiprocessing.Process(group=None, target=work1)

p1.start()

for i in range(10):

print("这是主进程", i)

time.sleep(0.5)

4.进程名称获取

.()

5. 你要去把那个进程对应的pid这个数字给拿过来。

有两种方法可以获取, 你可以按照这些方法来操作。

1).().pid

2)使用 os模块的()

import multiprocessing

import time

import os

def work():

# 获取进程的名称

print(multiprocessing.current_process())

# 获取进程的pid

print(multiprocessing.current_process().pid, os.getpid())

i = 0

while i < 10:

print("work中执行", i)

time.sleep(0.5)

i = i + 1

if __name__ == '__main__':

# 获取进程的pid

print(multiprocessing.current_process())

# 创建子进程

process1 = multiprocessing.Process(group=None, target=work)

process1.start()

i = 0

while i < 10:

print("我在主线程中执行",i)

time.sleep(0.3)

i = i + 1

获取那个父对象的id, 也就是在括号空着的情况下, 去获取父进程的id。

6.在启动子进程的时候, 要把相关的参数传递给它。

给子进程传递参数, 和给子线程传递参数这两个做法, 在基本的方面上是一样的一样。

7.在进程与进程之间, 那些属于全局范畴的变量是不进行共享操作的。

import multiprocessing

# 定义全局变量

num = 100

# 定义work方法,设置num1的值

def work():

global num # 在函数内部声明使用全局变量num

num = num + 1 # 对num值进行+1

print("work num = %d" % num)

# 定义work2方法,获取num1的值

def work2():

print("work2 num = %d" % num)

if __name__ == '__main__':

# 创建子进程

process1 = multiprocessing.Process(group=None, target=work, name="MyProcess")

process1.start()

# 创建第二个子进程

process2 = multiprocessing.Process(group=None, target=work2, name="MyProcess2")

process2.start()

运行结果:

work num = 101

work2 num = 100

从目前显示出来的运行结果我们可以很清楚地看到, 在work函数里面, 对num1变量所做的任何修改操作, 在随后执行的work2函数中并没有能够被获取到或者说接收过来, 此时num1的数值依然是保持原来设定的100。

因此, 基于这样的现象可以得出一个确定的结论, 也就是在不同的进程之间, 对于变量的使用权是完全独立的, 各个进程是不可以进行共享使用变量的行为的。

8.守护主进程

import multiprocessing

import time

def sub_process():

for i in range(10):

print("子进程运行中", i)

time.sleep(0.5)

if __name__ == '__main__':

# 创建子进程

p1 = multiprocessing.Process(group=None, target=sub_process, name="p1")

# 设置守护主进程

# 第一种方式:

# p1.daemon = True

# 第二种方式(最好在退出exit()前一句使用):

# p1.terminate()

# 启动

p1.start()

time.sleep(2)

print("OVER!

")

p1.terminate()

exit()

总结

以上这些内容属于个人的一点经验之谈, 目的是希望能够给到大家一个参考的作用, 同时也期望大家能够多多支持脚本之家。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 22:10:33

检测机构月底关账,发票台账上报告已出未开票怎么自动对出来

月底关账那几天&#xff0c;财务在群里问的是同一句话&#xff1a;这个月报告出了、票还没开的&#xff0c;一共多少&#xff1f;这背后是三张表——客服的开票申请单、报告完成台账、财务的发票台账&#xff0c;各自在不同人手里&#xff0c;对起来只能一单单翻。 翻表只是累…

作者头像 李华
网站建设 2026/10/1 22:09:43

OpenCV安装教程:pip/conda/源码编译与多平台避坑

1. 先搞清楚你要装的是哪一类OpenCVopencv安装教程在网上能搜出几百个版本&#xff0c;但真正让新手卡住的从来不是"敲哪条命令"&#xff0c;而是没弄清楚自己要装的是哪一类OpenCV。我见过太多人对着一个报错折腾一整天&#xff0c;最后发现是包选错了&#xff0c;或…

作者头像 李华
网站建设 2026/10/1 22:06:39

devtool热部署

方案一:使用 Spring 官方热部署(首选,免费) 直接使用 Spring 官方提供的 Spring Boot DevTools。 应该用哪个版本: 必须使用与你项目 Spring Boot 完全一致的版本。 引入方式: 如果你是 Maven 项目,直接在 pom.xml 中引入(无需手动写死版本号,它会自动继承父版本)…

作者头像 李华
网站建设 2026/10/1 22:04:55

【Linux笔记】Linux进程与守护进程

一、 进程组1.1 进程组的本质进程组&#xff1a;是一个或多个进程的集合&#xff0c;主要用于作业控制。进程组具有以下特征&#xff1a;唯一标识&#xff1a;每个进程组拥有一个进程组 ID&#xff08;PGID&#xff09;&#xff0c;其数据类型与 PID 完全相同。成员关系&#x…

作者头像 李华
网站建设 2026/10/1 22:01:41

053级联合并排序

级联合并排序 (Cascade Merge Sort) 053级联合并排序&#xff1a;瀑布流的排序智慧故事&#xff1a;瀑布流的智慧 想象一条山间瀑布&#xff1a;水从高处的宽大水潭开始&#xff0c;分成多股支流奔涌而下&#xff0c;每一级台阶都比上一级更窄&#xff0c;但最终所有水流在山脚…

作者头像 李华