Python 从入门到实战35(进程-multiprocessing模块)

news2024/11/25 14:58:07

        我们的目标是:通过这一套资料学习下来,可以熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

        上篇文章我们讨论了turtle库绘制图画操作的相关知识。今天学习一下进程的概念和创建方法。

1、什么是进程

在了解进程之前,我们先明确一下多任务的概念。多任务,是指操作系统执行多个任务。例如我们的计算机打开了音乐、浏览器、电影等,这时就是多任务运行。

上面说的每一个任务就是一个进程。所以,进程就是指计算机中已运行程序的实体。

进程和程序的不同之处在于:程序本身是指指令、数据、及其组织形式的描述。进程是程序真正运行实例。例如没有打开微信之前是程序,打开运行就开启了一个进程。如下图打开任务管理器,查看所示进程:

2、使用multiprocessing创建进程

1)创建进程的方法

multiprocessing 模块提供了Process 类来代表一个进程对象,语法格式:

Process(group,target,name,args,kwargs)

参数说明:group  ----参数未使用,值始终是None

target:表示当前进程启动时执行的可调用对象,子程序要执行的任务

args:表示传递给target函数的参数(要用元组)

kwargs:表示传递给target函数的参数字典

name:表示当前进程实例的别名,子进程多的名称

举例说明:实例化进程,执行子进程

#创建子进程的例子
from multiprocessing import Process

#执行子进程
def mytest(interval):
    print("i am a child process!")

#执行主程序
def main():
    print("i am farther process!")
    p = Process(target=mytest,args=(1,),name="p1-mytest")  #实例化Process 进程类
    p.start() #启动进程实例,即创建子进程
    print("farther process finish")

if __name__ == "__main__":
    main()

输出参考:

上面的例子中,p.start()#启动进程实例,即创建子进程,开始执行mytest()函数。

2)操作进程常用方法

除了这个start()方法以外,Process 的实例还有以下方法:

start():启动子进程,调用默认的run()

run():表示进程的运行方式。如果没有给定target 参数,对这个对象调用start()方法时,则将执行对象中的run()方法;

name:当前进程实例的名字,默认时Process-N,N 为从1开始递增的整数;

terminate:强制子程序终止进程,不管任务是否完成立即终止;

is_alive():判断子程序是否还在执行;

daemon:表示守护进程,默认值是False,当设置为Ture时,当父进程结束时,它会尝试终止其所有守护进程子。必须在start()之前设置;

join([timeout]):timeout默认值时None,该方法为阻塞,在调用join的子进程结束后才开始后面的代码,如果timeout有设定值,join会阻塞设定的时间才开始后面的代码;

pid:返回当前进程的ID。用os模块的os.getppid()是返回主进程的ID,os.getpid()是返回当前进程的ID;

exitcode:进程在运行时为None、如果为–N,表示被信号N结束(了解即可)。

举例说明:

#创建等待子进程执行结束的例子
import os
import time
from multiprocessing import Process
#两个子进程调用的方法
def child_1(interval):
    print("子进程(%s)开始执行,父进程为(%s)"%(os.getpid(),os.getppid()))  #打印子进程pid,父进程pid
    t_start = time.time()  #计时开始
    time.sleep(interval)   #程序将会被挂起interval 秒
    t_end = time.time()    #计时结束
    print("子进程(%s)执行时间为'%0.2f'秒"%(os.getpid(),t_end-t_start))  #子进程执行时间

def child_2(interval):
    print("子进程(%s)开始执行,父进程为(%s)"%(os.getpid(),os.getppid()))  #打印子进程pid,父进程pid
    t_start = time.time()  #计时开始
    time.sleep(interval)   #程序将会被挂起interval 秒
    t_end = time.time()    #计时结束
    print("子进程(%s)执行时间为'%0.2f'秒"%(os.getpid(),t_end-t_start))  #子进程执行时间

#执行主程序
def main():
    print("********父进程执行开始********")
    print("父进程的PID:%s"%os.getpid())  #输出当前程序的pid
    process1 = Process(target=child_1,args=(1,)) #实例化进程1
    process2 = Process(target=child_2,name='p2name',args=(2,))#实例化进程2

    process1.start() #启动进程1
    process2.start() #启动进程2

    #父进程继续执行,如果子进程还在执行则返回True
    print("process1.is_alive=%s"%process1.is_alive())
    print("process2.is_alive=%s"%process1.is_alive())

    #输出子进程的别名和PID
    print("process1.name=%s"%process1.name)   #按照默认设定的名字,展示Process-1
    print("process1.pid=%s" % process1.pid)
    print("process2.name=%s" % process2.name) #按照我们设定的名字,展示p2name
    print("process2.pid=%s" % process2.pid)

    print("********等待子进程********")
    process1.join()#
等待子进程1结束
    process2.join()
    print("********父进程执行结束********")
if __name__=="__main__":
    main()

黄色部分等待子进程执行结束,然后继续执行父进程,参考执行结果:

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

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

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

相关文章

anaconda创建环境无法定位到正确的Python解释器版本

一、概述 因为需要使用到torch其对Python的版本有些限制,我使用anacoda创建了Python版本3.8的环境,出现了一些问题,具体问题在下面进行分析。 二、具体分析 (一)问题概述 如图所示,在新创建的环境中&…

跟《经济学人》学英文:2024年10月05日这期 Dismantling Google is a terrible idea

Dismantling Google is a terrible idea Despite its appeal as a political rallying cry dismantling: (枪支)分解;解散;拆除;(dismantle的现在分词) appeal:吸引力 rallying …

Apollo9.0 Planning2.0决策规划算法代码详细解析 (5): OnLanePlanning::Init()

🌟 面向自动驾驶规划算法工程师的专属指南 🌟 欢迎来到《Apollo9.0 Planning2.0决策规划算法代码详细解析》专栏!本专栏专为自动驾驶规划算法工程师量身打造,旨在通过深入剖析Apollo9.0开源自动驾驶软件栈中的Planning2.0模块&am…

nginx反向代理,负载均衡,HTTP配置简述(说人话)

文章目录 反向代理正向代理反向代理普通反向代理分析解释 四层反向代理 负载均衡HTTPS配置基本配置Nginx 账户认证功能 反向代理 正向代理 所谓的正向代理,通俗来说就是,正向代理是一个位于客户端和目标服务器之间的服务器,它代表客户端向目…

Python 工具库每日推荐 【NumPy】

文章目录 引言Python科学计算库的重要性今日推荐:NumPy工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:图像处理案例分析高级特性广播机制高级索引通用函数(ufunc)性能优化技巧扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeS…

哪个牌子充电宝好用性价比又高?推荐5款2024年性价比充电宝!

在充电宝的世界里,技术的进步日新月异,它们早已超越了简单的便携充电功能,成为了我们日常生活中不可或缺的移动电源。然而,随着市场的繁荣,选择一款可靠、安全的充电宝变得愈发困难。许多品牌为了降低成本,…

【EXCEL数据处理】000017 案例 Match和Index函数。

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000016 案例 Match和Index函数。使用的软件&#xff…

静态路由故障排查

1、开始 静态路由是否能够加入到全局路由表中并成功指导报文正确转发, 取决于其出接口状态与下一跳可达性,以及相关检测联动的状态等方面。因此静态路由定位故障的思路是: 首先查看全局路由表中是否有该静态路由;然后据此相应地检查出接口状态、下一跳可…

融媒体服务中PBO进行多重采样抗锯齿(MSAA)

如果不理解pbo 那先去了解概念,在此不再解释,这是我为了做融合服务器viewpointserver做的一部分工作,融合服务器的功能是将三维和流媒体,AI融合在一起,viewpointserver会直接读取三维工程的文件,同时融合rt…

MySQL基础之约束

MySQL基础之约束 概述 概念:约束是作用在字段的规则,限制表中数据 演示 # 多个约束之间不需要加逗号 # auto_increment 自增 create table user(id int primary key auto_increment comment 主键,name varchar(10) not null unique comment 姓名,age i…

表达式求值(可以计算两位数以上)

此程序可计算两位数以上的表达式 import java.util.Stack;public class ExpressionEvaluator {public int evaluate(String s) {Stack<Integer> numbers new Stack<>();Stack<Character> operators new Stack<>();int i 0;char c s.charAt(i);whil…

stm32定时器中断和外部中断

一&#xff0c;中断系统的介绍 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中…

平衡二叉树——AVl树

AVL树 AVl树的概念AVL树的实现AVL树的结构AVl树的插入AVL树的旋转左单旋右单旋左右双旋右左双旋 AVl树以高度递归实现完整代码 AVl树的概念 AVL树是一种自平衡的二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;&#xff0c;由两位苏联数学家 Georgy Adelson-Velsk…

jQuery——事件处理

1、事件绑定&#xff08;2种&#xff09; ① eventName&#xff08;function&#xff08;&#xff09;{ }&#xff09; 绑定对应事件名的监听&#xff0c;例如&#xff1a;$&#xff08;‘#div’&#xff09;. click&#xff08;function&#xff08;&#xff09;{ }&#xf…

【复习】CSS中的选择器

文章目录 东西有点多 以实战为主选择器盒子模型 东西有点多 以实战为主 选择器 CSS选择器&#xff08;CSS Selectors&#xff09;是用于在HTML或XML文档中查找和选择元素&#xff0c;以便应用CSS样式的一种方式。 元素选择器&#xff08;Type Selector&#xff09; 选择所有…

在谷歌colab运行YOLO系列(重要比在云服务器搭建运行快)

在谷歌colab运行YOLO系列&#xff08;重要比在云服务器搭建运行快&#xff09; 一、谷歌云硬盘二、克隆 YOLOV5进行运行测试1&#xff0c;修改prepare文件中的参数2&#xff0c;修改voc.yaml3&#xff0c;修改yolov5s.yaml4&#xff0c;防止colab自动断开的方式&#xff08;必须…

今日指数项目个股描述功能实现

个股描述功能实现 1 个股描述功能实现说明 1&#xff09;原型示意 2&#xff09;接口说明 功能描述&#xff1a;个股主营业务查询接口 服务路径&#xff1a;/api/quot/stock/describe 服务方法&#xff1a;GET 请求参数&#xff1a;code #股票编码 响应参数&#xff1a; {…

Koa2项目实战3 (koa-body,用于处理 HTTP 请求中的请求体)

以用户注册接口为例&#xff0c;需要在请求里携带2个参数&#xff1a;用户名&#xff08;user_name&#xff09;和密码&#xff08;password&#xff09;。 开发者需要在接口端&#xff0c;解析出user_name 、password。 在使用Koa开发的接口中&#xff0c;如何解析出请求携带…

八、Drf解析器

八、解析器 8.1概念 解析用户请求发送过来的数据&#xff08;常用的是JSON&#xff09; 请求类型&#xff1a; get: ​ 方式1&#xff1a; http://127.0.0.1/web/?arg1v1&arg2v2 ​ 方式2&#xff1a;通过请求头发送 post: ​ 请求头&#xff1a; ​ content-typ…