多进程-multiprocessing-process两种方式创建子进程

进程间全局变量互不干扰

方式一:创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动

from multiprocessing import Process

import os

#创建进程

p = Process(target=run_proc,args=('arg1','arg2'))

#target指定创建的子进程要执行的任务函数,args为执行函数的参数,可以是元组,也可以是列表

#p = Process(target=run_proc,args=['arg1','arg2'])

#启动子进程

p.start()

#获取进程的name属性

print(p.name)

#获取进程的pid属性

print(p.pid)

#进程是否存活.is_alive()方法,返回True或False

print(p.is_alive())

#终止进程.terminate()

p.terminate()

#让父进程等待子进程

p.join()

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值;

方式二:进程的创建-Process子类

from multiprocessing import Process

class ProcessSon(Process):

def __init__(self,interval):

    #因为Process类本身也有__init__方法,这个子类相当于重写了这个方法,
    #但这样就会带来一个问题,我们并没有完全的初始化一个Process类,所以就不能使用从这个类继承的一些方法和属性,
    #最好的方法就是将继承类本身传递给Process.__init__方法,完成这些初始化操作

Process.__init__(self)

self.interval = interval

def run(self):

print(self.interval)

if __name__ == '__main__':

p = ProcessSon(3)

#对一个不包含target属性的Process类执行start()方法,就会运行这个类中的run()方法

p.start()

p.join()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值