【Python】进程和多进程的使用

news2024/9/25 21:27:41

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。


文章目录

  • 前言
  • 一、进程
    • 1.概念理解
    • 2.进程的启动
    • 3.python进程
  • 二、多进程


前言

进程是指计算机中正在运行的程序实例。
进程可以是操作系统分配的,也可以由其他进程创建。
每个进程都有自己的执行状态、内存空间和系统资源。
每个进程都是独立的,有自己独立的地址空间,因此它们之间不会相互干扰。
进程可以并发执行,即多个进程可以同时运行在计算机上。
操作系统负责管理进程的创建、调度、终止和资源分配。
进程之间可以通过进程间通信来进行数据传递和共享。


一、进程

1.概念理解

服务器的进程是指在服务器上运行的程序或任务。这些进程负责处理客户端请求、提供服务、处理数据等操作。常见的服务器进程包括:

  1. Web服务器进程:负责接收和响应HTTP请求,提供网页内容和服务,如Apache、Nginx等。
  2. 数据库服务器进程:负责管理和处理数据库操作,如MySQL、Oracle等。
  3. 文件服务器进程:负责管理和处理文件存储和传输,如FTP服务器。
  4. 邮件服务器进程:负责处理邮件的收发、存储和传输,如SMTP服务器、POP3服务器、IMAP服务器。
  5. DNS服务器进程:负责域名解析,将域名转换为IP地址,如BIND服务器。
  6. DHCP服务器进程:负责分配和管理IP地址及其他网络配置信息,如DHCP服务器。
  7. 防火墙进程:负责网络流量的过滤和监控,如iptables等。
  8. 安全认证服务器进程:负责用户认证和授权,如LDAP服务器、Radius服务器等。
  9. 远程登录服务器进程:负责用户远程登录和交互,如SSH服务器、Telnet服务器等。

这些服务器进程通过监听特定的网络端口,等待客户端发起请求,并根据请求的类型和内容进行相应的处理和回应。

服务器的进程可以是各种不同类型的应用程序,如Web服务器、数据库服务器、邮件服务器等。每个服务器进程通常都有一个唯一的标识符,以便在操作系统中进行识别和管理。

服务器进程的设计和实现是服务器应用程序开发中的重要部分。它决定了服务器的性能、可靠性和安全性。服务器进程需要考虑并发处理、负载均衡、数据管理、安全认证等方面的问题,以确保服务器能够有效地运行并提供高质量的服务。

2.进程的启动

进程的启动是指操作系统在接收到用户或程序的请求后,为其创建一个新的进程并使其运行起来的过程。

进程的启动包括以下几个步骤:

  1. 程序加载:操作系统首先会从磁盘或其他存储介质中加载待运行的程序到内存中。加载的过程中,操作系统会进行一些初始化操作,如分配内存空间、建立虚拟地址空间等。

  2. 资源分配:操作系统会为新创建的进程分配所需要的资源,如 CPU 时间片、内存空间、文件描述符等。这些资源的分配是根据系统的调度算法和进程的优先级来决定的。

  3. 进程控制块初始化:操作系统会为每个进程创建一个进程控制块(Process Control Block,PCB),用于存储进程的相关信息,如进程状态、程序计数器(PC)、寄存器的值、文件描述符表等。PCB 是操作系统管理和控制进程的重要数据结构。

  4. 上下文切换:在启动新进程之前,操作系统需要保存当前进程的上下文信息,包括当前进程的寄存器状态、程序计数器等。然后根据调度算法选择一个进程来执行,将其上下文信息加载到 CPU 中,使其开始执行。

  5. 执行进程:一旦新进程被加载到 CPU 中,并且操作系统将控制权交给该进程,进程就开始执行指令。进程执行期间,操作系统会根据调度算法决定如何分配 CPU 时间片,以及在必要时进行进程切换。

进程的启动是操作系统中的一个核心功能,操作系统需要负责合理地分配资源、管理进程状态,并保证进程的正常运行。同时,进程的启动也需要花费一定的时间和系统开销,因此操作系统需要进行优化以提高启动的效率。

3.python进程

执行 python main.py 命令会运行名为 main.py 的 Python 脚本文件。这是一种常见的方式来启动一个 Python 应用程序。

当你执行这个命令时,Python 解释器会读取 main.py 文件并逐行执行其中的代码。这样,你就可以在 main.py 中编写你的应用程序逻辑,并在命令行中运行它。

请注意,在运行 python main.py 之前,你需要确保已经安装了 Python 解释器,并且已经设置了正确的环境变量。如果一切都配置正确,那么执行 python main.py 命令应该会运行你的应用程序。

通过cmd中python启动程序,会创建一个进程,进程中会开启一个主线程,main的内容是在主线程中执行。每一个进程有名称、PID、状态、内存等信息。
在这里插入图片描述

二、多进程

在Python中,有多种方法可以实现多进程。下面是两种常用的方法:

  1. 使用multiprocessing模块:multiprocessing模块是Python内置的用于实现多进程的模块。它提供了一个Process类,可以创建一个新的进程,并通过调用其start()方法来启动进程。以下是一个使用multiprocessing模块创建和启动进程的示例代码:
from multiprocessing import Process

def my_function():
    # 进程要执行的任务
    print("Hello from a child process!")

if __name__ == "__main__":
    # 创建进程
    p = Process(target=my_function)
    # 启动进程
    p.start()
    # 等待所有任务完成
    p.join()

除了Process类,multiprocessing模块还提供了其他类和函数来实现不同的进程管理功能,例如Pool类用于创建进程池,Queue类用于进程间通信等。

需要注意的是,在Windows操作系统中,由于Python的GIL(全局解释器锁)限制,多个进程之间的共享数据可能会有问题。在这种情况下,可以使用`multiprocessing.Manager`类来创建进程间共享的数据结构。
  1. 使用concurrent.futures模块:concurrent.futures模块是Python 3引入的用于并发编程的模块,它提供了一个ProcessPoolExecutor类,可以用于创建一个进程池,并通过调用其submit()方法来提交任务。以下是一个使用concurrent.futures模块创建和启动进程的示例代码:
from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

def my_function():
    # 进程要执行的任务
    print("Hello from a child process!")

if __name__ == "__main__":
    # 创建进程池
    with ProcessPoolExecutor() as executor:
        # 提交任务给进程池
        future = executor.submit(my_function)
        # 获取任务的结果
        result = future.result()
        print(result)

以上示例中的my_function()是进程要执行的任务。通过调用相应的方法,可以创建、启动并等待进程结束。注意在使用多进程时,在主程序中使用if __name__ == "__main__":来确保代码在主进程中执行。

无论使用哪种方法,多进程可以提高程序的性能和并行处理能力,特别适用于需要处理大量数据或执行耗时任务的情况。使用多进程时,还需要注意进程间的通信和同步,以确保数据的一致性和正确性。

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

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

相关文章

2023年小型计算机视觉总结

在过去的十年中,出现了许多涉及计算机视觉(CV)的项目,无论是小型的概念验证项目还是更大规模的生产应用。应用计算机视觉的方法是相当标准化的: 1、定义问题(分类、检测、跟踪、分割)、输入数据(图片的大小和类型、视野)和类别(正是我们想要的) 2、注释…

【性能测试】真实企业,性能测试流程总结分析(一)

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

JuiceSSH结合内网穿透实现公网远程访问本地Linux虚拟机

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

dev express 列头筛选

设置这三个属性。 AllowAutoFiter::获取或设置是否可以使用自动筛选行筛选列的值AllowFiter:获取或设置网格视图中的筛选按钮(布局视图中的字段选按钮)是否显示在列标题中ImmediteUpdateAutoFiter: 获取或设置是否在最终用户修改自动筛选行单…

【网络奇遇记】揭秘计算机网络的性能指标:速率|带宽|吞吐量|时延

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 速率1.1 数据量1.2 速率 二. 带宽三. 吞吐量四. 时延4.1 发送时延4.2 传播时延…

【adb】电脑通过ADB向手机传输文件

具体步骤如下: Step1 下载ADB工具 下载最新版本的 ADB工具 !!! 注意:一定要是最新版本的ADB,否则很可能导致无法识别到手机。 将下载的ADB解压以后的文件如下图所示: Step2 添加环境变量 将 ADB的路径 D:\platformtools &…

YOLO算法改进7【中阶改进篇】:主干网络C3替换为轻量化网络MobileNetV3

解决问题:YOLOv5主干特征提取网络采用C3结构,带来较大的参数量,检测速度较慢,应用受限,在某些真实的应用场景如移动或者嵌入式设备,如此大而复杂的模型时难以被应用的。首先是模型过于庞大,面临…

git在vscode 的使用过程中 创建新分支 修改新分支代码 发现 master分支的代码也被修改了

1.问题 在我进行 代码迭代的时候 因为我主要用的是 vscode 我想创建一个分支 开发其他的功能 我发现一个问题 就是我创建了一个新的分支 修改代码 发现 master 也被修改了 就如同 这两个分支 都一样 指向了master 2.过程 经过我的测试和百度 我发现 怎么都不行 看了看 过程都没…

录制完视频如何去除重复部分?

在录制视频的过程中,有时会出现一些重复的部分,这给视频的制作人员带来了不小的困扰。如果不及时去除重复部分,不仅会影响观众的观看体验,还会浪费观众的时间和从业者的精力。那录制完的视频如何去除重复部分呢?无须担…

为什么我的网络这么卡卡卡卡卡?(网络调试篇)

前言 最近小白迷上了打游戏。 有没有一起上王者的小伙伴? 有没有一起吃鸡的小伙伴? 欧耶, 咱们组队 送人头去吧 为了不让对方太菜, 送人头是与对方最高的敬意。 闲话说到这,本文就结束了。 感谢观看~…

软件工程经济学习题 答案(不保证对错,找不到答案)

一、资金等值计算 1.某IT企业今年向银行贷款20万元以购置一台设备。若银行贷款利率为10%,规定10年内等额偿还,试求每年的偿还金额。 2.某软件企业向银行贷款200万元,按年利率为8%进行复利计息,试求该企业第5年末连本带利一次偿还银…

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

iconify图标集离线使用方案简介

1.需求描述 前端项目,技术栈使用Vue3Element Plus,参考了ruoyi-vue-pro项目与vue-element-plus-admin项目,封装了一个Icon组件,图标使用的是iconify,项目部署在内网环境,不能连接互联网,需要部署一套iconi…

nosql-redis整合测试

nosql-redis整合测试 1、创建项目并导入redis2、配置redis3、写测试类4、在redis中创建key5、访问80826、在集成测试中测试方法 1、创建项目并导入redis 2、配置redis 3、写测试类 4、在redis中创建key 5、访问8082 6、在集成测试中测试方法 package com.example.boot3.redis;…

DDR加终端匹配电阻和不加信号质量的区别

DDR采用菊花链拓扑结构时,由于信号传输线较长通常需要在DDR末端加上终端匹配电阻,端接的方式有很多,但是都是为了解决信号的反射问题,通常为了消除信号的反射可以在信号的源端或者终端进行解决,在源端处消除反射是采用…

Schmitt Trigger本质就是一个带迟滞的比较器

Chapter 18 Special Purpose CMOS Circuits 甚高 24 人赞同了该文章 Chapter 18 Special Purpose CMOS Circuits 这一章讲几个实用电路, Schmitt trigger 输入信号noisy, 输出产生干净的pulse. 然后介绍multivibrator, 拥有astable和monostable两态. input buffer design 对…

drf视图组件

Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验、保存、转换数据)控制数据库查询的执行 1.1 视图继承关系 视图的方法与属性: 1.2 视图 REST framework 提供了众多的通用视图基类与扩展类,以…

全国250米DEM数据

全国250米DEM数据 DEM是数字高程模型的英文简称(Digital Elevation Model),是研究分析地形、流域、地物识别的重要原始资料。由于DEM 数据能够反映一定分辨率的局部地形特征,因此通过DEM 可提取大量的地表形态信息,可用于绘制等高线、坡度图、…

git集成github(二)-- 遇见的问题与解决方法

1、share project on github时,弹出Cannot load information for github.com/zouxiaoya:Connection reset问题。 解决方法:pycharm-->setting-->version control-->github中,删除掉当前用户,点击reset重置即可。 2、 pus…

UE和Android互相调用

ue和android互调 这两种方式都是在UE打包的Android工程之上进行的。 一、首先是UE打包Android,勾选下面这项 如果有多个场景需要添加场景 工程文件在这个路径下 然后可以通过Android Studio打开,选择gradle打开 先运行一下,看看是否可以发布…