(一)python创建进程的两种方式

(一)python创建进程的两种方式创建进程的两种方式 1 函数方法 创建 proess 对象 指定 target 要执行的函数任务 2 类方法 继承 process 重写 run 方法 由这个类实例化之后执行 start 会自动调用 run 方法 1 函数方法 创建 proess 对象 指定 target 要执行的函数任务

大家好,我是讯享网,很高兴认识大家。
创建进程的两种方式:
  • 1.函数方法:创建proess对象,指定target要执行的函数任务
  • 2.类方法:继承process,重写run方法,由这个类实例化之后执行start会自动调用run方法

1.函数方法:创建proess对象,指定target要执行的函数任务
multiprocessing模块就是跨平台版本的多进程模块。
multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:
Process语法结构如下:
Process([group [, target [, name [, args [, kwargs]]]]])
  • target:表示这个进程实例所调用对象;
  • args:表示调用对象的位置参数元组;
  • kwargs:表示调用对象的关键字参数字典;
  • name:为当前进程实例的别名;
  • group:大多数情况下用不到;
    Process类常用方法:
  • is_alive():判断进程实例是否还在执行;
  • join([timeout]):是否等待进程实例执行结束,或等待多少秒;
  • start():启动进程实例(创建子进程);
  • run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;
  • terminate():不管任务是否完成,立即终止;
    Process类常用属性:
  • name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;
  • pid:当前进程实例的PID值;
 from multiprocessing import Process import os from time import sleep # 子进程要执行的代码 def run_proc(name, age, kwargs): for i in range(10): print('子进程运行中,name= %s,age=%d ,pid=%d...' % (name, age,os.getpid())) print(kwargs) sleep(0.5) if __name__=='__main__': print('父进程 %d.' % os.getpid()) p = Process(target=run_proc, args=('test',18), kwargs={ 
  
    
  "m":20}) print('子进程将要执行') p.start() sleep(1) p.terminate() p.join() print('子进程已结束')

讯享网

执行结果:


讯享网

讯享网父进程 21378. 子进程将要执行 子进程运行中,name= test,age=18 ,pid=21379... { 
  
    
  'm': 20} 子进程运行中,name= test,age=18 ,pid=21379... { 
  
    
  'm': 20} 子进程已结束

2.类方法:继承process,重写run方法,由这个类实例化之后执行start会自动调用run方法
自定义一个类,继承Process类,每次实例化这个类的时候,就等同于实例化一个进程对象
from multiprocessing import Process import time import os #继承Process类 class Process_Class(Process): #因为Process类本身也有__init__方法,这个子类相当于重写了这个方法, #但这样就会带来一个问题,我们并没有完全的初始化一个Process类,所以就不能使用从这个类继承的一些方法和属性, #最好的方法就是将继承类本身传递给Process.__init__方法,完成这些初始化操作 def __init__(self,interval): Process.__init__(self) self.interval = interval #重写了Process类的run()方法 def run(self): print("子进程(%s) 开始执行,父进程为(%s)"%(os.getpid(),os.getppid())) t_start = time.time() time.sleep(self.interval) t_stop = time.time() print("(%s)执行结束,耗时%0.2f秒"%(os.getpid(),t_stop-t_start)) if __name__=="__main__": t_start = time.time() print("当前程序进程(%s)"%os.getpid()) p1 = Process_Class(2) #对一个不包含target属性的Process类执行start()方法,就会运行这个类中的run()方法,所以这里会执行p1.run() p1.start() p1.join() t_stop = time.time() print("(%s)执行结束,耗时%0.2f"%(os.getpid(),t_stop-t_start)) 

两种方式的对比:
  • 1、方法
  • 2、继承类
继承类是以面向对象考虑这个事的,所以业务逻辑复杂,建议使用继承类,更好理解
小讯
上一篇 2025-03-03 23:15
下一篇 2025-02-23 10:19

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/118463.html