概要
在Python中,多进程编程通过multiprocessing
模块实现,能够有效利用多核CPU资源,提高程序的并发处理能力。本文将以您提供的两个示例为基础,结合代码优化和详细分析,探讨如何实现更高效的多进程编程。
示例程序1:使用multiprocessing.Pool
和Manager
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.Pool
和Queue
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
,确保进程池在使用完毕后自动关闭。