> 文档中心 > Python语法进阶篇 - 65 - 进程与多进程概述

Python语法进阶篇 - 65 - 进程与多进程概述


无题
🎉 三载辛苦缘离别,今兮说与山鬼听。 🎉
🎉 惊觉山鬼不识字,西风难寐不动情。 🎉

前言
✌ 作者简介:渴望力量的哈士奇,大家可以叫我 🐶哈士奇🐶 。(我真的有一只哈士奇)
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


📕 系列专栏:
               👍 Python全栈系列 - [更新中]     【 本文在该系列】
                       🍎 Python零基础入门篇
                       🍎 Python语法进阶篇
               👋 网安之路系列
​                       🍋 网安之路踩坑篇
​                       🍋 网安知识扫盲篇
​                       🍋 Vulhub 漏洞复现篇
​                       🍋 Shell脚本编程篇
​                       🍋 Web攻防篇   2021年9月3日停止更新,转战先知等安全社区
​                       🍋 渗透工具使用集锦  2021年9月3日停止更新,转战先知等安全社区
​                ⭐️ 点点点工程师系列
​                       🍹 测试神器 - Charles 篇
​                       🍹 测试神器 - Fiddler 篇
​                       🍹 测试神器 - Jmeter 篇
​                       🍹 自动化 - RobotFrameWork 系列
​                       🍹 自动化 - 基于 JAVA 实现的WEB端UI自动化
                       🍹 自动化 - 基于 MonkeyRunner 实现的APP端UI自动化

Python语法进阶篇 - 65 - 进程与多进程概述 Python语法进阶篇 - 65 - 进程与多进程概述

文章目录

    • Python语法进阶篇简介
    • 进程与多进程的概念
      • 什么是进程?
      • 进程的使用场景
      • 进程的口粮
      • 多进程
      • 多进程的执行方式
      • 小节

Python语法进阶篇简介

大家好啊,我胡汉三又回来了。 Python零基础入门篇 已经结束,接下来我们即将开始 Python语法进阶篇。该阶段我们主要围绕 多线程编程正则表达式、以及我们将会有一个 抽奖的实战练习

接下来我们就要开始学习 多进程与多线程 了,关于这一块的知识点,其实是有一点的难度的,不过我会尽量使用简单的入门浅显的方法去阐述这部分内容。

首先要做的就是先要了解 什么是多进程与多线程?进程与线程之间的关系是什么?在实际的场景中它们又是如何应用的。

在概念上有了一定的了解之后,我们就可以利用 Python 中的模块学习如何在 Python 中创建和使用多进程与多线程。在这个过程中,我们还会学习 进程与线程 关于 的概念,除此之外我们还会学习 进程与线程的锁的概念 。为什么会有锁?如何使用锁?在后续的章节我们也会讲到。

最后,我们还会了解一下 Python 中线程的一些特殊性。(这是概念上的内容,理解就好。)

在正则表达式章节同样也是从概念上作为入手,然后整体的了解一下 正则表达式的使用方法 。当有了一个使用概念的时候,我们会学习与之有密切关系的 匹配字符与特殊字符 。当了解了这些内容之后,我们再去学习 正则表达式模块中的常用函数 。正则表达式也是有一定的难度的知识,它的难点主要是它的灵活多变,关于这一块一定要认真才行。

接下来就是我们的重头戏,综合项目实战。我们的主体将会是一个通过命令行的方式执行一个抽奖的操作。

进程与多进程的概念

接下来我们将进入一个全新的阶段,关于进程、线程与异步的相关知识。了解了进程、线程和异步的相关知识后,可以大大的提高我们程序的执行效率。这方面的知识其实是开发中比较难以理解的,作为初学乍道我们不会深入的对它们进行研究。但希望通过该章节的学习,希望大家能够知道进程、线程是什么。异步又是怎么一回儿事儿,以及它们基本的使用方法和特性。

今天这部分章节没有代码相关的知识,因为在这之前我们先来了解一下什么是进程。

什么是进程?

其实进程一直都贯穿着我们的周围,无论是我们使用的智能手机还是电脑,其实都与进程息息相关。比如我们打开某短视频软件,其实就是打开该短视频的一个进程。我们甚至可以说进程就是一个软件的本身,再专业一些的话就是 进程就是程序执行的载体

对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个word就启动了一个word进程,打开两个记事本就启动了两个记事本进程。

那么怎样的任务才算是一个进程呢?当一个任务被开启后,操作系统会分配它所需的系统资源,包括内存,I/O和CPU等,如果系统资源不够,则会出现系统崩溃,这样的任务可被称为进程。

进程的使用场景

在我们的实际生活中,当我们打开一个浏览器的时候,又或者打开一个游戏的时候;或者我们平时打开的QQ或者微信。当我们双击去启动他们的时候,其实执行的都是一个个的进程。只不过每个进程都有它们各自的名字而已。

所以我们打开的每一个软件(或者游戏),甚至我们之前执行的每一个 Python 脚本都是启动一个进程,而软件(游戏、脚本)就等于我们说的进程。

进程的口粮

我们的进程(或者说软件)要想能够成功的执行启动,其实是需要能量的。人类要想精力充沛,充满能量就需要吃饭。而进程也是一样的, 它们的口粮就是 CPU 与 内存 。不同的程序根据执行的业务场景、强度的不同,对于 CPU 与 内存的需求量也不近相同。就好比是强壮的人和娇小的人饭量要大一些一样… 同样的道理。

多进程

每一个软件启动之后,都是启动一个进程。我们拿手机来举例,在多年以前的时候。我们的智能手机还没有那么的先进,每次我们只能打开一个软件。当我们需要打开另外一个的时候,需要先将当前的软件关闭,才能打开另外一个软件。

比如我们用的苹果手机,在4代之前都是如此,每次只能启动一个线程(即每次只能打开一个软件),这种每次只能启动一个软件的系统,我们称之为单进程系统。

但是现在已经不一样了,我们可以在我们的智能手机中一次性启动多个软件,比如打开微信、QQ或者手机浏览器,它们之间实际上是互不干扰的。

虽然有可能会退到后台,但是它们依然会在后台运行,保持持续工作。比如我们可以打开网易云音乐,一边听着音乐一边在我们的微信上聊天。 启动众多软件的主角就是我们刚刚说的系统,所以相对于这些我们启动的软件来说,系统就是所有软件的父进程,也叫做主进程。而相对于系统这个主进程来说,所有的由它创建的软件的进程就是子进程。

让我们来总结一下多进程,多进程就是可以同时启动多个进程。这些进程都是在执行程序,但是它们互不干扰各自执行自己的业务逻辑。我们可以在一个系统中创建多个进程,每个进程是不同的身份,比如它们是QQ、是微信… 但是相对于一个软件来说(我们拿微信来举例),它在执行程序的时候,也可以再次启动多个进程。比如一个进程帮助我们接收最新的聊天消息,一个进程帮助我们接收朋友圈的最新消息,它们都是由微信这个主进程创建的子进程。所以我们也可以在我们创建的 Python 脚本中创建多个子进程,我们依然可以做一个相关关联。我们的 Python 脚本就相当于微信这个软件,而脚本就相当于主进程;由脚本中创建的新的进程就相当于是我们脚本的子进程…(脑袋炸了…绕的很…)

多进程的执行方式

接下来我们看一下多进程与并行的概念图



前文我们提到过,CPU 与 内存 是进程的口粮。其中的 CPU 不仅仅可以想象成是粮食,也可以理解为是跑道。我们创建好的进程会在 CPU 创建好的跑道上执行运行,我们电脑中的 CPU 是有很多个核心的。上图中的最顶部是 CPU,这个CPU下有四个核心(我们可以认为是4个跑道),当进程被创建之后它就会去找是否有空闲的跑道,当发现有空闲的跑道就会跑进去执行。我们可以看到上图中 3 CORE 这个跑道有两个进程都选择了它,它们会先后进去执行。我们把多进程在不同的多个内核中执行叫做 '多进程的并行处理'

小节

以上内容就是我们今天所要了解的进程与多进程相关概念。什么是进程、以及多进程又是怎么回事儿。多个进程在执行的时候相互不干扰、同时工作,可以大大的提高我们的效率。这很好理解,如果我们同一时间只能做一件事情,那我们很有可能就会消耗很多时间。这种一件件来处理工作的方式我们通常称之为 "串行工作"。而 "并行工作" 也就是同一时间处理多个事情,必定会缩短我们的工作时间,提高我们的工作效率。

当然,每个进程都需要消耗一定的 CPU资源与内存 ,进程开的越多,对我们的 CPU 与 内存 的依赖也就越多,这也是 进程的一个负面因素。这也不是一个问题,后续会告诉大家如何防止多进程吃垮我们的内存和CPU。