进程实现多任务(进程概念、单进程、多进程执行多任务)

在Python程序中,想要实现多任务可以使⽤进程来完成,进程是实现多任务的⼀种⽅式。属于CPU密集型的任务。

进程的概念

进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位

 

⼀个正在运⾏的程序或者软件至少有⼀个进程,也就是说每启动⼀个进程,操作系统都会给其分配⼀定的运⾏资源(比如内存资源)保证进程的运⾏。

 

⽐如:现实⽣活中的公司可以理解成是⼀个进程,公司提供办公资源(电 脑、办公桌椅等),真正⼲活的是员⼯,员⼯可以理解成线程。

 

注意:

  ⼀个程序运⾏后⾄少有⼀个进程,⼀个进程默认至少有⼀个线程(主线程),进程⾥⾯可 以创建多个线程,线程是依附在进程⾥⾯的,没有进程就没有线程。

进程的作用

充分利用cpu资源,让多个任务(小于等于cpu个数)并行运行,从而提高运行效率。

进程适合cpu密集型的任务。

单进程运行

复制代码
def work_a():
    print("任务A,玩命工作")

def work_b():
    print("任务B,玩命工作")
'''
按照代码的执行顺序 , work_a函数执行完毕后才能执行work_b函数
如果可以让work_a和work_b同时并发运行 , 显然执行效率会大大提升 
'''
work_a()
work_b()
复制代码

一个任务一个任务的按顺序执行,效率低,执行时间长。适合任务之间有依赖顺序的场景。

多进程执行任务

充分利用cpu(核心)资源,并发执行任务

复制代码
 1 # 1. 导入多进程模块
 2 import multiprocessing
 3 
 4 
 5 def work_a():
 6     print("任务A,玩命工作")
 7 
 8 
 9 def work_b():
10     print("任务B,玩命工作")
11 
12 
13 if __name__ == '__main__':   # 多进程,一定不用少了此句,此句用于保护主程序代码
14     # 2. 创建子进程
15     work_a_process = multiprocessing.Process(target=work_a())
16     work_b_process = multiprocessing.Process(target=work_b())
17 
18     # 3. 启动进程
19     work_a_process.start()
20     work_b_process.start()
复制代码

上例:有3个进程:主进程、2个子进程。因为任务只有2个,也可以创建1个子进程。

单进程与多进程对比

  1. 执行方式:

    • 单进程:程序在一个进程中顺序执行,按照代码的先后顺序逐步执行。
    • 多进程:程序在多个进程中同时执行,每个进程拥有独立的内存空间,可以并行执行。
  2. 资源利用:

    • 单进程:只能充分利用单个 CPU 核心,无法实现真正的并行计算。
    • 多进程:可以利用多个 CPU 核心进行并行计算,提高任务的处理速度和系统的响应能力。
  3. 内存占用:

    • 单进程:所有任务共享同一进程的内存空间,可能导致内存占用过高。
    • 多进程:每个进程都拥有独立的内存空间,可以更好地控制内存占用。
  4. 编程复杂度:

    • 单进程:编写单进程程序相对简单,代码结构清晰,调试和排错也相对容易。
    • 多进程:编写多进程程序较复杂,需要考虑进程间通信、数据同步等问题,代码会更加复杂,调试和排错也相对困难。
  5. 适用场景:

    • 单进程:适用于简单的任务,不需要并行计算的场景,或者需要确保程序稳定运行的场景。
    • 多进程:适用于大规模数据处理、复杂计算、并行计算等需要充分利用多核心资源的场景。

总体来说,单进程适合简单的任务,而多进程适合需要并行计算和充分利用多核心资源的任务。选择使用哪种方式取决于具体的需求和应用场景。

 

posted @   Allen_Hao  阅读(270)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示