进程池基础

本文介绍如何使用Python的multiprocessing模块创建进程池,提高并行任务处理效率。文章详细讲解了进程池的创建、异步与同步任务分配、进程池的关闭与终止,以及主进程的阻塞等待等关键概念。

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

手动添加进程比较繁琐,可以使用进程池。


创建进程池:构造方法进程数,与参数--建进程
构造方法指定入口函数,与参数--取进程

进程池方法:
    close:关闭进程池,关闭后无法取进程。报错:ValueError: Pool not running。此时进程池中的进程仍在运行。
    terminate:关闭进程池中所有进程
    join:使主进程等待子进程执行完后再运行以后代码。否则,子进程未结束而主进程已结束,子进程内容无法输出。必须有

异步取进程:apply_async
同步取进程:等待第一个进程完成再取下一个进程,因此会阻塞

【1】:当取的进程数大于进程池创建时制定的进程数时,
    会有指定的进程数个进程运行,其他后来的进程陷入等待,但不会阻塞主进程的运行

from multiprocessing import Pool
import multiprocessing
import os, time

def pro_funa(p):
    # if p < 3:
    #     time.sleep(1)
    # # 当前进程
    # multiprocessing.current_process().join()
    # multiprocessing.current_process().start()

    print(p)
    print('子进程1--->', os.getpid())
    print('+++++++++++++++++++++++++++++\n')
    time.sleep(1)

def pro_funb(p):
    print('子进程2--->', os.getpid())
    print('-----------------------\n')

def main():
    """主进程入口函数"""
    # 穿件进程吃
    poola = Pool(2)
    # 取进程
    # proa = poola.apply_async(pro_funa)
    # print(proa, type(proa))
    # prob = poola.apply_async(pro_funb)
    # prob = poola.apply_async(pro_funa)

    # for循环异步取进程【1】
    la = [pro_funa, pro_funb]
    for i in range(10):
        # 不同入口函数
        # poola.apply_async(la[i%2], args=(i,))
        # 相同入口函数
        poola.apply_async(pro_funa, args=(i,))
    # 关闭进程池
    poola.close()
    # proa = poola.apply_async(pro_funa)
    # 关闭进程池中所有进程
    poola.terminate()
    # 主进程阻塞
    poola.join()
    print('finish')



if __name__ == '__main__':
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值