news 2026/2/2 2:37:31

Python语言:多任务与多进程详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python语言:多任务与多进程详解

一、引言

今天这篇文章主要是带大家了解一下多任务的编程.

二、多任务的编程

1.为什么要有多任务?

首先发出一个问题,利用之前讲过的内容咱们到底能不能实现多任务操作呢?

答案是否定的,因为之前所写的程序都是单任务的,也就是说一个函数或者方法执行完成 , 另外一个函数或者方法才能执行。要想实现多个任务同时执行就需要使用多任务。多任务的最大好处是充分利用CPU资源,提高程序的执行效率。

2.什么是多任务?

多任务是指在同一时间可以执行多个任务,例如如今的计算机大多都是多任务操作系统.

3.多任务的两种表现形式

多任务分为两种,分别是并发和并行

3.1并发操作

并发指在一小段时间内快速交替的去执行任务,是一种伪并行.

例如:对于单核cpu处理多任务,操作系统轮流让各个任务交替执行,假如:软件1执行0.01秒,切换到软件2,软件2执行0.01秒,再切换到软件3,执行0.01秒……这样反复执行下去 , 实际上每个软件都是交替执行的 . 但是,由于CPU的执行速度实在是太快了,表面上我们感觉就像这些软件都在同时执行一样 . 这里需要注意单核cpu是并发的执行多任务的。

3.2并行操作

并行是指在一段时间内真正的去同时执行多个任务.

对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的任务,多个内核是真正的一起同时执行多个任务。这里需要注意多核cpu是并行的执行多任务,始终有多个任务一起执行。

三、多进程

1.什么是进程

进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程。

例如你正在运行的微信、qq等软件,他们都是进程.

2.多进程的作用

def func_a(): print('a') def func_b(): print('b') func_a() func_b()

如图是一段很简单的代码,一旦运行这段代码,他会先执行完a,再去执行b,但是如果我们让func_a()和func_b()同时执行的话,会让我们的效率大大提升.

3.多进程完成多任务

① 导入进程包

import multiprocessing

② 通过进程类创建进程对象

进程对象 = multiprocessing.Process()

③ 启动进程执行任务

进程对象.start()

3.1多进程任务中创建进程对象

进程对象 = multiprocessing.Process([group [, target=任务名 [, name]]])

3.2多进程创建进程对象中的参数说明

参数名说明
target执行的目标任务名,这里指的是函数名(方法名)
name进程名,一般不用设置
group进程组,目前只能使用None

3.3进程创建与启动代码

边玩游戏边听音乐:

import multiprocessing import time def music(): for i in range(3): print('听音乐...') time.sleep(0.2) def play_game(): for i in range(3): print('玩游戏...') time.sleep(0.2) if __name__ == '__main__': music_process = multiprocessing.Process(target=music) play_game_process = multiprocessing.Process(target=play_game) music_process.start() play_game_process.start()

3.4进程执行带有参数的任务

创建进程:

Process([group [, target [, name [, args [, kwargs]]]]])

参数说明:

参数名说明
args以元组的方式给执行任务传参,args表示调用对象的位置参数元组,args=(1,2,'anne',)
kwargs以字典方式给执行任务传参,kwargs表示调用对象的字典,kwargs=

代码示例:

import multiprocessing import time def music(num): for i in range(num): print('听音乐...') time.sleep(0.2) def coding(count): for i in range(count): print('敲代码...') time.sleep(0.2) music_process = multiprocessing.Process(target=music, args=(3, )) coding_process = multiprocessing.Process(target=coding, kwargs={'count': 3}) music_process.start() coding_process.start()

案例:多个参数传递

import multiprocessing import time def music(num, name): for i in range(num): print(name) print('听音乐...') time.sleep(0.2) def coding(count): for i in range(count): print('敲代码...') time.sleep(0.2) if __name__ == '__main__': music_process = multiprocessing.Process(target=music, args=(3, '多任务开始')) coding_process = multiprocessing.Process(target=coding, kwargs={'count': 3}) music_process.start() coding_process.start()

4.获取进程编号

4.1什么是进程编号?

进程编号就好比我们的身份证,每个运行中的进程都有一个独属于它的进程编号,我们想找到某个进程的时候,只需要找到他的编号就好,那我们该如何获取进程编号呢?

4.2两种进程编号

① 获取当前进程编号

getpid()

② 获取当前进程的父进程编号

getppid()

4.3获取当前进程编号

import os def work(): # 获取当前进程的编号 print('work进程编号', os.getpid()) # 获取父进程的编号 print('work父进程的编号', os.getppid()) work()

5.进程应用注意点

5.1进程间不共享全局变量

实际上创建一个子进程就是把主进程的资源进行拷贝产生了一个新的进程,这里的主进程和子进程是互相独立的。

5.2主进程与子进程之间的结束顺序

默认主进程应该等待子进程结束后再结束,按照常理而言主进程结束的话,不管子进程结束没结束都应该立马终止.

但是要是主进程结束后出现了子进程还没有结束的情况我们又该如何应对呢?

解决方案一:设置守护进程

import multiprocessing import time # 工作函数 def work(): for i in range(10): print('工作中...') time.sleep(0.2) if __name__ == '__main__': # 创建子进程 work_process = multiprocessing.Process(target=work) # 设置守护主进程,主进程退出后子进程直接销毁,不再执行子进程中的代码 work_process.daemon = True # 启动子进程 work_process.start() # 延迟1s time.sleep(1) print('主进程执行完毕')

解决方案二:销毁子进程

import multiprocessing import time # 工作函数 def work(): for i in range(10): print('工作中...') time.sleep(0.2) if __name__ == '__main__': # 创建子进程 work_process = multiprocessing.Process(target=work) # 启动子进程 work_process.start() # 延迟1s time.sleep(1) # 让子进程直接销毁,表示终止执行, 主进程退出之前,把所有的子进程直接销毁就可以了 work_process.terminate() print('主进程执行完毕')

以上两种方法都可以解决主进程结束而子进程还没有结束这种问题.

四、结语

本来是想把线程和协程也一块讲一下的,但是多任务和进程这儿的内容有点多,剩下的内容就下次再讲吧.

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

5步打造终极精简Windows 11系统:Tiny11Builder完整实战教程

5步打造终极精简Windows 11系统:Tiny11Builder完整实战教程 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 想要让老旧电脑焕发新生?厌倦了…

作者头像 李华
网站建设 2026/1/30 17:52:05

完全掌握LeaguePrank:英雄联盟身份深度定制全攻略

想让你的英雄联盟账号展现出与众不同的个性风采吗?🎮 LeaguePrank正是你需要的完美定制工具!这款基于LCU API开发的合法修改器,让你在不违反游戏规则的前提下,自由修改段位显示、生涯背景、在线状态和头像信息。接下来…

作者头像 李华
网站建设 2026/1/27 19:13:48

Qwen3-8B轻量化旗舰模型实战:基于PyTorch的完整部署流程

Qwen3-8B轻量化旗舰模型实战:基于PyTorch的完整部署流程 在AI应用快速落地的今天,一个现实问题摆在开发者面前:如何在有限的硬件资源下运行强大的大语言模型?百亿参数的“巨无霸”固然能力惊人,但动辄需要多张A100显卡…

作者头像 李华
网站建设 2026/1/30 8:39:25

LangChain提示工程优化Qwen-Image-Edit-2509语义理解准确率

LangChain提示工程优化Qwen-Image-Edit-2509语义理解准确率 在电商运营、社交媒体内容创作等高频视觉更新的场景中,图像编辑早已不再是设计师专属的手动精修任务。每天成千上万的商品图需要换色、去水印、替换背景或调整文案——传统依赖Photoshop和人工操作的方式&…

作者头像 李华
网站建设 2026/2/2 2:28:34

收藏必备!大模型Agent成本优化面试精选:15道高频考点详解

本文精选15道关于Agent成本与优化的高频面试题,涵盖成本分析、成本优化策略、API调用优化、Token消耗优化、缓存策略、批量处理、模型选择成本、工具调用成本、成本监控、成本预测、成本分摊、ROI分析、成本控制最佳实践、免费方案、成本对比等核心知识点&#xff0…

作者头像 李华
网站建设 2026/1/30 17:25:37

Dify平台创建音乐智能体:输入歌词即可由ACE-Step谱曲

Dify平台创建音乐智能体:输入歌词即可由ACE-Step谱曲 在短视频、播客和独立游戏内容爆发的今天,一个创作者最常遇到的问题是:有了动人的故事和文字,却找不到合适的背景音乐。使用现成的版权音乐不仅容易“撞车”,还可能…

作者头像 李华