mutiprocessing

本文介绍如何使用Python的multiprocessing模块创建并管理多个子进程来执行任务。通过实例演示了子进程的创建、启动、参数传递及阻塞等待等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mutiprocessing    模块创建进程,标准库

1, 需要将事件封装为函数
2, 使用mutiprocessing提供的类创建新进程
3, 新的进程和对应的函数相关联,进程启动会自动执行函数,完成事件
4, 进程回收


创建子进程类:
mutiprocessing.Process()
功能: 创建子进程
参数:     name: 新进程名,默认名:process-1
        target:    目标函数
        args:     元祖, 要给函数传递的参数
        kwargs: 字典,要给函数传递的参数

p.start()    功能:启动子进程
p.join([timeout])    功能: 阻塞等待回收响应的子进程; 默认为阻塞;timeout为超时时间
p.name        进程名称
p.pid        创建的进程pid
p.is_alive()    true/false    判断进程状态,是否是活跃进程
p.daemon        默认为False, 表示主进程执行后不影响子进程的执行,如果设置为True,则主进程执行完毕,所有的子进程一同推出
                1,必须在start()前
                2,使用daemon = True的时候,不用加join阻塞
                3,该属性不是linux/unix中的守护进程设置
                
                
守护进程: 生命周期长,随系统创建、随系统销毁
            不受前端控制,后台运行
            操作系统进程,或者自动化运行进程居多
            
 


import multiprocessing
import time
import os
	
def eating(sec, food):
    print('eathing PID:',os.getpid())
    print('我们在吃',food)
    time.sleep(sec)
    print("{}吃完了".format(food))

def drinking(sec,drinks):
    print('drinking PID:',os.getpid())
    print('喝{}丫...'.format(drinks))
    time.sleep(sec)
    print('{}喝完了...'.format(drinks))

#创建子进程,并将函数放到里面执行
#位置传参
p1 = multiprocessing.Process(target = eating, args=(3,'西瓜'))
#字典传参
p2 = multiprocessing.Process(target= drinking,kwargs={'sec':4, 'drinks':'西瓜汁'})

#执行子进程
p1.start()
p2.start()

print('----------------------')
#阻塞子进程
p1.join()
p2.join()
print('==========================')


print('father pid:',os.getpid())
print('father processing')
# 2 个进程复制文件
import os
import multiprocessing

def copy1(f_source, f_target):
    size = os.path.getsize(f_source)
    n = size // 2
    fr = open(f_source, 'rb')
    fw = open(f_target, 'wb')
    while True:
        if n < 64:
            data = fr.read(n)
            fw.write(data)
            break
        data = fr.read(64)
        fw.write(data)
        n -= 64
    fw.close()
    fr.close()

def copy2(f_source, f_target):
    size = os.path.getsize(f_source)
    fr = open(f_source,'rb')
    fr.seek(size//2,0)
    fw = open(f_target,'wb')
    while True:
        data = fr.read(64)
        if not data:
            break
        fw.write(data)
    fw.close()
    fr.close()

def main():
    pid1 = multiprocessing.Process(target= copy1, args=('/root/meeting.png','/root/copy1.png'))
    pid2 = multiprocessing.Process(target= copy2, args=('/root/meeting.png','/root/copy2.png'))

    pid1.start()
    print(pid1.pid)
    pid2.start()
    print(pid2.pid)

main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值