多任务

电脑中的多任务

思考:为什么在下载的时候要多个任务同时下载

多任务的优势
多任务的最大好处是充分 利用CPU资源,提高程序的执行效率

1. 多任务的概念
多任务是指在 同一时间 内执行 多个任务


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

  • 并发
  • 并行

3. 并发
在一段时间内 交替 去执行多个任务

例子:
对于单核cpu处理多任务,操作系统轮流让各个 任务交替执行

4. 并行
在一段时间内 真正的同时一起 执行多个任务

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

进程的介绍

1. 程序中实现多任务的方式
在 Python 中,想要实现多任务可以使用 多进程 来完成

2. 进程的概念
进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程,例如:正在运行的qq,微信等,他们都是一个进程

注意:

一个程序运行后至少有一个进程

3. 多进程的作用

思考
图中是一个非常简单的程序,一旦运行hello.py这个程序,按照代码的执行顺序,func_a函数执行完毕后才能执行func_b函数,如果可以让func_a和func_b同时运行,显然执行hello.py这个程序的效率会大大提升

4. 多进程的作用

多进程完成多任务

1. 进程的创建步骤

  • 导入进程包
import multiprocessing
  • 通过进程类创建进程对象
进程对象 = multiprocessing.Process()
  • 启动进程执行任务
进程对象.start()

2. 通过进程类创建进程对象

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

3. 进程创建与启动的代码

# 创建子进程
sing_process = multiprocessing.Process(target=sing)
# 创建子进程
dance_process = multiprocessing.Process(target=dance)
# 启动进程
sing_process.start()
dance_process.start()

多进程完成多任务

  • 导入进程包 import multiprocessing
  • 创建子进程并指定执行的任务 sub_process = multiprocessing.Process(target=任务名)

进程执行带有参数的任务

1. 进程执行带有参数的任务

参数名 说明
args 以元组的方式给执行任务传参
kwargs 以字典方式给执行任务传参

2. args参数的使用

# target:进程执行的函数名
# args:表示以元组的方式给函数传参
sing_process = multiprocessing.Process(target=sing,args=(3,))
sing_process.start()

3. kwargs参数的使用

# target:进程执行的函数名
# kwargs:表示以字典的方式给函数传参
dance_process = multiprocessing.Process(target=dance, kwargs={"num":3})
# 启动进程
dance_process.start()

进程执行带有参数的任务

  • 元组方式传参: 元组方式传参一定要和参数的 顺序保持一致
  • 字典方式传参: 字典方式传参字典中的Key一定要和 参数名保持一致

获取进程编号

进程编号的作用
当程序中进程的数量越来越多时,如果没有办法区分朱金城和子进程还有不同的子进程,那么就无法进行有效的进程管理,为了方便管理实际上每个进程都是有自己编号的

获取进程编号的两种方式:

  1. 获取当前进程编号
    os.getpid()
  2. 获取当前父进程编号
    os.getppid()

1. os.getpid()的使用

import os
pid = os.getpid()
print(pid)

2. os.getppid()的使用

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

获取进程编号

  • 获取当前进程编号:os.getpid()
  • 获取当前父进程编号:os.getppid()

进程的注意点

主进程会等待所有的子进程执行结束再结束

1. 主进程会等待所有的子进程执行结束再结束

import time
import multiprocessingdef work():for i in range(10):print("工作中...")time.sleep(0.2)if __name__ == '__main__':work_process = multiprocessing.Process(target=work)work_process.start()# 主进程睡眠1秒time.sleep(1)print("主进程执行完了")

2. 设置守护主进程

import time
import multiprocessingdef work():for i in range(10):print("工作中...")time.sleep(0.2)if __name__ == '__main__':work_process = multiprocessing.Process(target=work)# 设置守护主进程,主进程结束子进程自动销毁,不再执行子进程代码work_process.daemon = Truework_process.start()# 主进程睡眠1秒time.sleep(1)print("主进程执行完了")

3. 知识要点

为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。

设置守护主进程方式:子进程对象.daemon = True

进程的注意点

  • 主进程会等待所有的子进程执行结束再结束,除非设置子进程守护主进程

第二十一天Python之进程相关推荐

  1. python之进程和线程的对比

    python之进程和线程的对比 1. 进程和线程的对比的三个方向 关系对比 区别对比 优缺点对比 2. 关系对比 线程是依附在进程里面的,没有进程就没有线程. 一个进程默认提供一条线程,进程可以创建多 ...

  2. Python实例浅谈之五Python守护进程和脚本单例运行

    一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...

  3. Python当前进程信息 (os包)

    Python当前进程信息 (os包) 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系. 进程 ...

  4. 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法

    在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 参考文章: (1)在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 (2)https://www.cnbl ...

  5. Python守护进程和脚本单例运行

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...

  6. python的进程线程和协程_python成长之路 :线程、进程和协程

    python线程 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分 ...

  7. Python创建进程、线程的两种方式

    代码创建进程和线程的两种方式 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. ...

  8. python并行计算进程池通信_Python使用进程池管理进程和进程间通信

    与线程池类似的是,如果程序需要启动多个进程,也可以使用进程池来管理进程.程序可以通过 multiprocessing 模块的 Pool() 函数创建进程池,进程池实际上是 multiprocessin ...

  9. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

最新文章

  1. 原创推荐!B站最强学习资源汇总(数据科学,机器学习,Python)
  2. numpy.where()用法
  3. 用css3简单实现进度条
  4. 优化你的手游:使用脏矩形技术
  5. 【centOS】centOS安装图形界面
  6. python+[:]+切片_我从C ++到Python的方式:概念上的改变
  7. PHP二开美化版站长技术导航网站源码
  8. Linux终端显示图像
  9. python数据结构4-栈和队列
  10. 2018年内蒙古开出4.93亿环保罚单
  11. iphone-common-codes-ccteam源代码 CCCompile.h
  12. 计算机黑屏闪光标,电脑开机黑屏只有光标在闪的解决方法
  13. RISC-V CPU设计(六)---四路组相联Cache的设计
  14. Vuforia入门之简单图片识别案例(一)
  15. 希尔伯特:数学世界的亚历山大(2009-06-11 21:33:43)
  16. linux下文件恢复方法,Linux下误删文件恢复办法
  17. 计算机网络(谢希仁第七版)期末重点
  18. 怎么看Mac电脑的序列号,Mac序列号是多少
  19. Apple ID 登录
  20. 使用HtmlUnit爬取知网论文

热门文章

  1. android 汽车gps开发,Android GPS定位开发教程
  2. 【超图+CESIUM】【基础API使用示例】50、超图|CESIUM - moveLeft\moveRight\moveForward\moveBackward实现运动中的碰撞检测效果
  3. oracle 备份命令
  4. 在python3中、下列输出变量a的正确写法是_大学生安全教育网课答案智慧树2020
  5. 系统动力学:非线性世界的视角
  6. 选择恐惧症的福音!教你认清MVC,MVP和MVVM
  7. ADI Blackfin DSP处理器-BF533的开发详解31:汉字/ASIC II 字库(含源代码)
  8. jenkins 运行 jenkins-agent.jnlp 报错None of the protocols are enabled
  9. php exception trace,php Exception打印error trace 实例
  10. 润乾报表 -根据登录用户控制报表展现效果(动态宏)