multiprocessing 模块创建进程

文章介绍了如何使用Python的multiprocessing模块来创建和管理子进程。通过Process类创建进程对象,绑定执行函数,然后启动进程。进程间通过start和join方法协同工作,父进程负责创建和回收子进程,子进程执行特定任务。示例代码展示了创建、启动和回收单个及多个子进程的过程。
摘要由CSDN通过智能技术生成

流程特点
【1】 将需要子进程执行的事件封装为函数
【2】 通过模块的Process类创建进程对象,关联函数
【3】 可以通过进程对象设置进程信息及属性
【4】 通过进程对象调用start启动进程
【5】 通过进程对象调用join回收进程

基本接口使用

Process()
功能 : 创建进程对象
参数 : target 绑定要执行的目标函数
args 元组,用于给target函数位置传参
kwargs 字典,给target函数键值传参
p.start()
功能 : 启动进程
注意:启动进程此时target绑定函数开始执行,该函数作为子进程执行内容,此时进程真正被创建

p.join([timeout])
功能:阻塞等待回收进程
参数:超时时间
注意

使用multiprocessing创建进程同样是子进程复制父进程空间代码段,父子进程运行互不影响。
子进程只运行target绑定的函数部分,其余内容均是父进程执行内容。
multiprocessing中父进程往往只用来创建子进程回收子进程,具体事件由子进程完成。
multiprocessing创建的子进程中无法使用标准输入

"""
Process 创建进程演示
1. 编写进程函数
2. 生成进程对象
3. 启动进程
4. 回收进程
"""

"""
Process 创建进程演示
1. 编写进程函数
2. 生成进程对象
3. 启动进程
4. 回收进程
"""

import multiprocessing as mp
from time import sleep

a = 1

# 进程执行函数
def fun():
    print("开始一个进程")
    sleep(2)
    global a
    print("a = ",a)
    a = 10000
    print("子进程结束")

# 创建进程对象
if __name__ == '__main__':
    mp.freeze_support()




    p = mp.Process(target=fun)
    # 启动进程
    p.start()

    # 父进程执行事件
    sleep(3)
    print("父进程干点事")

    # 回收进程
    p.join()

    print("a:",a)
    """
    pid = os.fork()
    if pid == 0:
        fun()
        os._exit()
    else:
        os.wait()
    """

    print("======================")

创建多个子进程

from multiprocessing import Process,freeze_support

from time import sleep
import os
def th1():
    sleep(3)
    print('吃饭')
    print(os.getppid(),'--',os.getpid())
def th2():
    sleep(2)
    print("睡觉")
    print(os.getppid(),'--',os.getpid())

def th3():
    sleep(4)
    print("打豆豆")
    print(os.getppid(),'--',os.getpid())
if __name__ == "__main__":
things = [th1,th2,th3]
jobs = []
if __name__  == "__main__":
    freeze_support()
    for th in things:
        p = Process(target=th)
        jobs.append(p)  # 对进程对象进行存储
        p.start()
    
    # [i.join() for i in jobs]
    
    # 一起回收
    for i in jobs:
        i.join()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值