python:并发编程(三)

news2024/11/28 19:02:42

前言

本文将和大家一起探讨进程、线程、协程的监控方式,方便我们将这些“虚的东西”具体化,也方便讲解诸如子进程这些概念。我相信,本章将会为后续学习提供非常有用的帮助。本章内容将基于win10系统,为大家展现一个具体化的进程、线程、协程,能够了解他们是怎么工作的。

本文为python并发编程的第三篇,上一篇文章地址如下:

python:并发编程(二)_Lion King的博客-CSDN博客

下一篇文章地址如下:

(暂无)


一、监控进程

以Pycharm应用为例,如下图,我们来查看任务管理器显示的进程情况。其中,pycharm应用打开之后,有很多进程,这是为什么呢?

1、一个应用只有一个主进程

在大多数操作系统中,一个应用程序通常只有一个主进程,也被称为主线程。主进程是应用程序的入口点,负责程序的启动和执行。它会创建和管理其他的子进程或线程来执行特定的任务。

然而,有些应用程序可能会创建多个进程,每个进程都有自己的独立执行环境。这种情况下,每个进程都可以有自己的主线程。例如,某些应用程序可能会将某些任务或功能分配给不同的进程,以实现并行处理或提高系统的性能。

总结起来,一个应用程序通常有一个主进程或主线程,但也可以创建额外的进程来执行特定的任务或实现特定的功能。这取决于应用程序的设计和需求。

而这额外的进程,其实就是子进程。

2、如何区分主进程

首先,通过任务管理器有时候是看不出主进程的。细心的朋友可能会发现,有些应用在PID那一栏直接显示了进程号,那个其实就是主进程;而Pycharm应用那一行却没有显示进程号,那是因为主进程号在应用下面了。

在 Windows 10 任务管理器中,当你看到应用没有显示进程而只有子进程时,这可能是由于任务管理器的显示方式以及进程的层次结构导致的。

在任务管理器中,进程通常按层次结构显示。主要的父进程(例如浏览器或编辑器)将显示为应用程序名称,并且可能没有明确的进程标识符(PID)。相反,这些父进程下面会有一系列的子进程,每个子进程都有自己的进程标识符(PID)。这些子进程通常负责执行应用程序的各个任务,例如渲染网页、处理文件操作等。

所以,当你在任务管理器中看到应用程序没有显示进程而只有子进程时,实际上是因为任务管理器更关注显示子进程,而将父进程(应用程序)隐藏或不明确显示。这种显示方式有助于更好地组织和管理进程,并提供更清晰的进程层次结构信息。

因此,我们可以通过Process Explorer工具的层级结构清晰地看到主进程为11668,展示如下:

二、监控线程

资源监视器是Windows提供的一个工具,可以提供更详细的系统资源使用情况,包括进程、线程、内存、磁盘、网络等方面的信息。

通过资源监视器,可以监控和管理正在运行的线程,提供了更高级的功能和信息展示。你可以通过以下步骤打开资源监视器:

(1)打开任务管理器:按下"Ctrl + Shift + Esc"键组合来打开任务管理器。

(2)切换到"性能"选项卡:在任务管理器中,切换到"性能"选项卡。

(3)打开资源监视器:在"性能"选项卡中,点击下方的"资源监视器"按钮或在菜单栏中选择"资源监视器"。

(4)监控线程:在资源监视器中,可以选择"线程"选项卡,查看当前运行的线程的详细信息,包括线程ID、优先级、状态、CPU使用情况等。

资源监视器提供了更丰富的线程监控和管理功能,可以更直观地查看线程的使用情况和性能统计。通过资源监视器,你可以深入了解线程的活动,并进行必要的调整和优化。

需要注意的是,对于一些高级的线程监控和分析需求,可能需要使用专门的性能分析工具或第三方工具,以获得更深入的线程相关信息和性能指标。

 三、监控协程

其实在Windows操作系统中,没有现成的工具来监控,可能需要使用第三方工具。因为协程的监控和调试相对于线程和进程来说较为复杂。传统的调试工具和监控工具通常更专注于线程和进程级别的调试,对于协程的监控支持较为有限。

那怎么办呢?

要么找到第三方工具,要么使用我提供的方案:其实,Python中的asyncio库提供了一些调试工具,可以用于监控和跟踪协程的执行。其中包括asyncio.all_tasks()函数可以获取当前运行的所有协程任务,asyncio.Task对象提供了一些属性和方法用于监控协程的状态和执行情况,以及asyncio.get_event_loop()函数可以获取当前的事件循环对象。

这里暂不进行实操,后续文章会实验。

四、子进程的那些事儿

1、什么是子进程

子进程是由父进程创建的新进程。在操作系统中,当一个进程创建了一个子进程,那么这个新创建的进程就被称为子进程,而原始的进程则被称为父进程。

子进程与父进程相互独立,它们有自己的代码段、数据段和堆栈空间。子进程可以执行与父进程不同的程序代码,拥有自己的资源和执行环境。子进程可以继承父进程的一些属性,例如文件描述符、环境变量等,但也可以在创建时进行修改。

子进程通常用于并行处理、任务分发和执行特定的功能。父进程可以通过与子进程进行通信来传递数据、控制子进程的行为,或者等待子进程的完成。

在某些情况下,子进程也可以创建自己的子进程,形成进程的层次结构。这样的层次结构可以实现更复杂的进程间通信和协作。

总结而言,子进程是由父进程创建的新进程,它们相互独立,可以执行不同的代码,拥有自己的资源和执行环境。子进程常用于并行处理和执行特定任务。

2、子进程又有子进程,是无限的么

在理论上,子进程可以创建自己的子进程,形成无限的子进程层次结构。每个子进程都有能力创建更多的子进程,以实现更复杂的进程间通信和协作。

然而,在实际应用中,通常会对子进程的层次结构进行限制或控制。操作系统或编程语言通常会设置一定的限制,如最大进程数、资源限制等,以确保系统的稳定性和性能。此外,设计良好的应用程序通常会使用适当的进程管理策略,避免无限制地创建子进程。

因此,尽管在理论上子进程可以无限创建子进程,但在实际应用中,通常会有限制和控制。具体的限制取决于操作系统和应用程序的设计。

比如,在Windows 10系统中,存在一些限制和限制策略,以确保系统的稳定性、安全性和性能。具体什么限制,这里不展开讲。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法修炼之练气篇(Python版)——练气一层初期

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) ✨博主的其他文章:点击进入博主的主页​​​​​​ 前言:Pyth…

ChineseBERT使用指北

文章目录 ChineseBert 模型介绍开源代码使用方法未完待续 ChineseBert 模型介绍 论文地址:https://arxiv.org/pdf/2106.16038.pdf 代码地址:https://github.com/ShannonAI/ChineseBert bert是语义模型,因此无法解决形近字、音近字的问题。 …

C语言:写一个函数返回参数二进制中 1 的个数(三种思路)

题目: 链接:二进制中1的个数__牛客网 来源:牛客网 输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。 示例: 输入 10 输出 2 说明 十进制中10的32位二进制表示为0000 0000 0000 0…

从零开始 Spring Boot 40:定时任务

从零开始 Spring Boot 40:定时任务 图源:简书 (jianshu.com) 定时任务是一种很常见的需求,比如我们可能需要应用定期去执行一些清理工作,再比如可能需要定期检查一些外部服务的可用性等。 fixedDelay 要在 Spring 中开启定时任…

深度学习笔记之Transformer(一)注意力机制基本介绍

深度学习笔记之Transformer——注意力机制基本介绍 引言回顾: Seq2seq \text{Seq2seq} Seq2seq模型中的注意力机制注意力机制的简单描述注意力机制的机器学习范例: Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归 Nadaraya-Watson \text…

编程必备:JAVA多线程详解

目录 前言 1.入门多线程 1.1. 线程、进程、多线程、线程池 1.2.并发、串行、并行 1.3. 线程的实现方式 1.3.1. 继承 Thread 类 1.3.2. 实现 Runnable 接口 1.3.3. 使用 Callable 和 Future 1.3.4. 使用线程池 1.4.线程的状态 1.5. 线程常用方法 1.5.1 sleep() 1.4…

验证码识别系统Python,基于CNN卷积神经网络算法

一、介绍 验证码识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台&#xff0…

基于Java网上花店系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

Prompt 范式产业实践分享!基于飞桨 UIE-X 和 Intel OpenVINO 实现跨模态文档信息抽取

近期 Prompt 范式备受关注,实际上,其思想在产业界已经有了一些成功的应用案例。中科院软件所和百度共同提出了大一统诸多任务的通用信息抽取技术 UIE(Universal Information Extraction)。截至目前,UIE 系列模型已发布…

【JavaEE】网络原理——传输层协议:UDP和TCP

目录 1、简单了解应用层协议 2、传输层UDP协议 3、传输层TCP协议 3.1、TCP报文介绍 3.2、TCP实现可靠传输的核心机制 3.2.1、确认应答 3.2.2、超时重传 3.3、连接管理 (三次挥手,四次握手) 3.3.1、建立连接(三次握手&a…

Java-API简析_java.lang.Enum<E extends Enum<E>>类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131212897 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

接口自动化测试丨如何实现多套环境的自动化测试?

在敏捷迭代的项目中,通常会将后台服务部署到多套测试环境。那么在进行接口自动化测试时,则需要将服务器的域名进行配置。使用一套接口测试脚本,通过切换域名地址配置,实现多套环境的自动化测试。 实战练习 分别准备两套测试环境…

Redis的单线程模型和标准Reactor线程模型的关系

文章目录 Redis到底是不是单线程?标准Reactor线程模型单reactor单线程单reactor多线程多reactor多线程 redis6.0 之前的单线程模型redis6.0 之后的单线程模型为什么redis最初选择的单线程网络模型?为什么redis6.0 io读写要用多线程? Redis 6.…

索尼RSV视频修复方法论视频文件修复时样本文件的三同

索尼RSV类的文件修复案例有很多,程序操作也很简单没什么可说的,这次这个索尼ILCE-7SM3的案例就是为了让大家更好的认识视频修复中我称之为“三同“的重要性,想要恢复的效果好必须要把准备工作做到位。 故障文件:45.1G RSV文件 故障现象: 索…

软件渗透测试是什么?软件产品哪种情况下需要做渗透测试?

随着互联网的普及,软件的开发方越来越多,但是随之而来的也是信息安全方面的问题。在软件开发过程中,安全问题一定要被重视,因为漏洞和安全问题一旦被黑客利用,会给公司和用户带来巨大的损失。为了避免这种情况的发生&a…

语音工牌在运营商智慧装维场景,有何应用价值?

客户精细化运营时代,如何做好客户服务体验,提升品牌美誉度和好感度,是众多企业开始思考的问题。 在运营商行业,上门装维和营业厅服务场景是企业与客户直接互动最多的地方。这个过程的服务质量直接影响到客户成交率、客户投诉率和…

软件测试金融银行项目如何测?从业务到测试实战,超细总结整理...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 金融行业的业务特…

chatgpt赋能python:Python怎么打备注?让你的代码更加清晰易懂

Python怎么打备注?让你的代码更加清晰易懂 Python是一种流行的编程语言,可以用来构建不同类型的应用程序,从网站到数据分析。无论您是初学者还是经验丰富的开发人员,写清晰,易于理解的代码都是非常重要的,…

Linux之ACL权限

目录 Linux之ACL权限 场景 设定ACL权限 ACL权限管理命令 参数及作用 给用户和用户组添加ACL权限 案例 创建 目录 /project 的所有者和所属组其他人权限设定为 770 创建旁听用户pt,并赋予ACL权限rx 查看目录/project的ACL权限 验证pt 用户对于 /project 目录没有写权…

el-element-admin实现双路由菜单

需求: 1、输入用户名登录企业级菜单 2、点击企业级菜单中的首页,右边显示项目列表,点击某一行跳转到项目级菜单 注意: 企业级菜单和项目级菜单,后端分别给接口 具体实施: 1、点击面包靴首页的时候设置标记…