Python多进程编程示例

概要

在Python中,多进程编程通过multiprocessing模块实现,能够有效利用多核CPU资源,提高程序的并发处理能力。本文将以您提供的两个示例为基础,结合代码优化和详细分析,探讨如何实现更高效的多进程编程。

示例程序1:使用multiprocessing.PoolManager

from multiprocessing import Pool, Manager

def func(my_list, my_dict):
    my_list.append(10)
    my_list.append(11)
    my_dict['a'] = 1
    my_dict['b'] = 2

if __name__ == '__main__':
    # 创建共享的数据结构
    manager = Manager()
    my_list = manager.list()
    my_dict = manager.dict()

    # 创建进程池
    with Pool(processes=3) as pool:
        # 使用apply_async异步执行func函数
        for _ in range(3):
            pool.apply_async(func, (my_list, my_dict))
        
        # 关闭进程池,等待所有进程完成
        pool.close()
        pool.join()

    # 打印结果
    print("Final list:", my_list)
    print("Final dictionary:", my_dict)

说明

  • 使用with语句管理Pool,确保进程池在使用完毕后自动关闭。

示例程序2:使用multiprocessing.PoolQueue

import multiprocessing
import time
import os

def pidprint(st):
    print(f"pid({os.getpid()}): {st}")

def write(q):
    pidprint("Starting write")
    while True:
        q.put(time.strftime("%H:%M:%S", time.localtime()))
        pidprint('Write operation')
        time.sleep(1)

def read(q):
    pidprint("Starting read")
    while True:
        pidprint(q.get(True))

if __name__ == "__main__":
    # 使用Manager创建共享的Queue
    manager = multiprocessing.Manager()
    queue = manager.Queue()

    # 创建进程池
    with multiprocessing.Pool(2) as pool:
        # 异步执行write和read函数
        pool.apply_async(write, (queue,))
        pool.apply_async(read, (queue,))
        
        # 关闭进程池,等待所有进程完成
        pool.close()
        pool.join()

    print('Process ends')

说明

  • 使用with语句管理Pool,确保进程池在使用完毕后自动关闭。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘色的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值