首页 > 系统相关 >Python 从入门到实战35(进程-multiprocessing模块)

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

时间:2024-10-10 22:20:39浏览次数:12  
标签:Process name start Python 35 print 进程 os multiprocessing

        我们的目标是:通过这一套资料学习下来,可以熟练掌握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()

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

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

标签:Process,name,start,Python,35,print,进程,os,multiprocessing
From: https://blog.csdn.net/weixin_45999406/article/details/142718899

相关文章

  • Python 从入门到实战36(进程-Process、Pool类)
            我们的目标是:通过这一套资料学习下来,可以熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。        上篇文章我们讨论了通过multiprocessing模块创建进程操作的相关知识。今天学习一下Process、Po......
  • python第一章试题集(答案全)
    第一题判断题1-1  Python语言是开源的,现拥有十几万个第三方函数库。T1-2  以下代码运行时会出错  T1-3Python中“4”+“3”的结果为“7”。F1-4下面Python程序是错误的.T1-5Python语言可以用面向对象的方法编程。T1-6Python是一种跨平台、开源、免费......
  • python 类篇
    目录2.类实例属性和类属性构造函数和self参数类方法静态方法共有私有[待补充]3.继承单继承多继承super函数MRO列表super的本质经典类和新式类4.多态C++多态的定义python多态鸭子类型5.虚函数null2.类面向对象的三个特点,封装,继承,多态。其中封装指的是将函数和数据封在一起形......
  • 2024初秋集训——提高组 #35
    A.语言题目描述在一个语言中,有\(26\)种单词,每个单词用一个小写英文字母表示。每种单词可能有多种词性,词性有名词(\(N\))、动词(\(V\))、形容词(\(A\))。我们定义一个名词短句(\(NP\))为一个名词(\(N\))或一个形容词加名词短句(\(A+NP\))或两个名词短句(\(NP_1+NP_2\)),一个句子(\(S\))为一个名......
  • [档] python 多环境管理-vene
    python创建虚拟环境虚拟环境相当于单独隔离出一套独立的环境,你可以在这个环境中安装各种包,继而构建各种不同的具体的环境。类似于docker或早先的虚拟机。当有多个不同的项目,不同的项目依赖的python库或者python的不同版本,此时就可以使用多环境管理,创建虚拟环境,为不同的项目构造......
  • 【springboot9735】基于springboot+vue的车辆充电桩
    主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。收藏点赞不迷路,关注作者有好处项目描述随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理系统也不例外,但目前国内仍都使用人工管理,市场......
  • python 图片转icon图标
    功能分析Tkinter:用于构建简单的GUI,包括文件选择按钮、下拉菜单和生成按钮。Pillow(PIL):用于处理图像加载、调整尺寸并保存为.ico格式。功能实现:用户点击“选择图片”按钮,打开文件对话框选择图片。下拉菜单用于选择图标的尺寸(16x16到256x256)。用户点击“生成图标”按......
  • 基于yolov8、yolov5的安全帽检测系统(含UI界面、数据集、训练好的模型、Python代码)
    项目介绍项目中所用到的算法模型和数据集等信息如下:算法模型:  yolov8、yolov8+SE注意力机制或yolov5、yolov5+SE注意力机制,直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有GPU,无法自行训练。数据集:  网上下载的数据集,格式都已......
  • 学习python2.0
    这两天白天都满课,傍晚才有私人时间。今天学习了5.2字符串和编码:(1)ASCII,可以编码的是英文字母,数字和一些符号。GB2312编码,可以编码中文。Unicode把所有语言都统一到一套编码里,比较方便,但是占用的存储空间大。UTF-8编码可以省空间。(2)ord()函数获取字符的整数表示,chr()......
  • Python:条件分支 if 语句全讲解
    Python:条件分支if语句全讲解如果我拿出下面的代码,阁下该做何应对?ifnotreset_excutedand(terminatedortruncated): ...else:...----前言:消化论文代码的时候看到这个东西直接大脑冻结,没想过会在这么基础的东西上犯难看完即便是冰之勇者也能学会大概吧本......