multiprocessing模块创建子进程

使用multiprocessing模块创建子进程有两种方法

1.用Process类创建子进程对象,然后用start()方法调用

from multiprocessing import Process
import time

def task():
    print(‘son run‘)
    time.sleep(5)
    print(‘son over‘)

if __name__ == ‘__main__‘:
    p=Process(target=task)  创建子进程对象参数target=函数名
    time.sleep(1)    
    p.start()      调用子进程对象
    time.sleep(2)
    print(‘over‘)

==》son run  over  son over

2.创建父类为Process的类,在自定义的类中创建一个run方法,生成自定义类的对象为进程对象

class Myprocess(Process):
    def __init__(self,name,s):  需要传入的参数可以根据需求设置
        super().__init__()
        self.name=name
        self.s=s
    def run(self):    run方法会自动被作为进程程序调用
        print(‘%s run‘%self.name)
        time.sleep(self.s)
        print(‘%s over‘%self.name)

if __name__ == ‘__main__‘:
    p=Myprocess(‘aaa‘,1)
    p1=Myprocess(‘bbb‘,3)
    p.start()
    p1.start()

==》bbb run  aaa run  aaa over  bbb over

注意

运行子进程需要在if __name__ == ‘__main__‘:包裹下才能正常运行
创建的进程必须通过start方法来调用才会开始运行,也就是说子啊不被调用的情况下就

不会被执行

进程内存相互隔离

父进程和子进程在运行中内存是被隔离开的,不同的进程在运行时会被放在单独的内存中空间中运行

n=10
def fun():
    n=0
    print(‘son:n=%s‘%n)

if __name__ == ‘__main__‘:
    p=Process(target=fun)
    print(‘far:n=%s‘%n)
    p.start()

==》far:n=10  son:n=0

Prscess常用方法和属性

p.join() 用来等待子进程结束
class Myprocess(Process):
    def __init__(self,name):
        super().__init__()
        self.name=name

    def run(self):
        print(‘%s run‘%self.name)
        time.sleep(2)      测试:子进程运行需要2-3秒
        print(‘%s over‘%self.name)

if __name__ == ‘__main__‘:
    p=Myprocess(‘aaa‘)
    p.start()
    p.join(3)         join参数中传入等待时间,单位是秒
    print(‘start‘)

==》aaa runaaa overstart等待是让父进程等待子进程,等待适当的时间让子进程完成运行
p.terminate()  # 终止进程print(p.name)  # 进程的名称print(p.is_alive()) #是否存活p.terminate() # 与start一样 都是给操作系统发送指令 所以会有延迟

print(p.pid)  查看父进程编号print(p.exitcode) # 获取退出码

原文地址:https://www.cnblogs.com/duGD/p/10957512.html

时间: 2024-10-23 10:25:45

multiprocessing模块创建子进程的相关文章

使用multiprocessing模块创建多进程

1 # 使用multiprocessing模块创建多进程 2 # multiprcessing模块提供了一个Process类来描述一个进程对象. 3 # 创建子进程时,只需要传入一个执行函数和函数的参数,即可完成一个process实例的创建 4 # 用start()方法启动进程 5 # 用join()方法实现进程间的同步. 6 import os 7 from multiprocessing import Process 8 # os模块中的getpid()方法获取当前进程的id 9 # get

Python并发进程—multiprocessing 模块创建进程

multiprocessing 模块创建进程 进程创建方法 1.流程特点[1] 将需要子进程执行的事件封装为函数[2] 通过模块的Process类创建进程对象,关联函数[3] 可以通过进程对象设置进程信息及属性[4] 通过进程对象调用start启动进程[5] 通过进程对象调用join回收进程 2.基本接口使用 Process() 功能 : 创建进程对象 参数 : target 绑定要执行的目标函数 rgs 元组,用于给target函数位置传参 kwargs 字典,给target函数键值传参 p.

multiprocessing模块创建进程

一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似. multiprocessing的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件. 二.Process类

Python进程之multiprocessing模块

python的multiprocessing模块是跨平台的多进程模块,multiprocessing具有创建子进程,进程间通信,队列,事件,锁等功能,multiprocessing模块包含Process,Queue,Pipe,Lock等多个组件. 1.Process 创建进程的类 Process([group [, target [, name [, args [, kwargs]]]]]) 参数介绍:group参数未使用,值始终为Nonetarget表示调用对象,即子进程要执行的任务args表

Python:线程、进程与协程(5)——multiprocessing模块(2)

上篇博文介绍了Python的multiprocessing模块创建进程Process 类,进程间通信,进程间的同步三个部分,下面接着介绍学习进程共享. (1)内存共享 在多进程情况下,由于每个进程有自己独立的内存空间,怎样能实现内存共享呢?multiprocessing模块提供了Value, Array,这两个是函数,详细定义在sharedctypes.py里,有兴趣的可以去看看(等了解了ctypes模块后回头再分享下我的理解,今天就先放放)   Value Value的初始化非常简单,直接类似

python的multiprocessing模块进程创建、资源回收-Process,Pool

python的multiprocessing有两种创建进程的方式,每种创建方式和进程资源的回收都不太相同,下面分别针对Process,Pool及系统自带的fork三种进程分析. 1.方式一:fork() 举例: 1 import os 2 pid = os.fork() # 创建一个子进程 3 os.wait() # 等待子进程结束释放资源 4 pid为0的代表子进程. 缺点:1.兼容性差,只能在类linux系统下使用,windows系统不可使用:2.扩展性差,当需要多条进程的时候,进程管理变得

python 3 编程之多进程 multiprocessing模块

一 .multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了

Day28:Event对象、队列、multiprocessing模块

一.Event对象 线程的一个关键特性是每个线程都是独立运行且状态不可预测.如果程序中的其他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就 会变得非常棘手.为了解决这些问题,我们需要使用threading库中的Event对象. 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生.在初始情况下,Event对象中的信号标志被设置为假.如果有线程等待一个Event对象,而这个Event对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真.一个线程如果将一个E

Python:线程、进程与协程(4)——multiprocessing模块(1)

multiprocessing模块是Python提供的用于多进程开发的包,multiprocessing包提供本地和远程两种并发,通过使用子进程而非线程有效地回避了全局解释器锁. (一)创建进程Process 类 创建进程的类,其源码在multiprocessing包的process.py里,有兴趣的可以对照着源码边理解边学习.它的用法同threading.Thread差不多,从它的类定义上就可以看的出来,如下: class Process(object):     '''     Proces