====== 第二十九章:多进程 ======
===== 本章目标 =====
完成本章学习后,你将能够:
* 创建和管理进程
* 进程间通信
* 使用进程池
* 理解进程vs线程
===== 创建进程 =====
import multiprocessing
import time
def worker(name):
print(f"Process {name} started")
time.sleep(2)
print(f"Process {name} finished")
if __name__ == '__main__':
# 创建进程
p1 = multiprocessing.Process(target=worker, args=("P1",))
p2 = multiprocessing.Process(target=worker, args=("P2",))
p1.start()
p2.start()
p1.join()
p2.join()
===== 进程间通信 =====
import multiprocessing
# Queue
queue = multiprocessing.Queue()
def producer(queue):
for i in range(5):
queue.put(i)
def consumer(queue):
while True:
item = queue.get()
if item is None:
break
print(f"Got {item}")
# Pipe
parent_conn, child_conn = multiprocessing.Pipe()
parent_conn.send('hello')
print(child_conn.recv())
# Shared memory
from multiprocessing import Value, Array
num = Value('d', 0.0) # 共享双精度浮点数
arr = Array('i', range(10)) # 共享整数数组
===== 进程池 ======
from multiprocessing import Pool
import os
def square(n):
return n * n
if __name__ == '__main__':
with Pool(processes=4) as pool:
# map
results = pool.map(square, range(10))
# apply_async
result = pool.apply_async(square, (5,))
print(result.get())
# 多个任务
multiple_results = [pool.apply_async(square, (i,)) for i in range(10)]
print([r.get() for r in multiple_results])
===== 本章练习 =====
1. 实现多进程并行计算
2. 实现进程池下载器
3. 比较进程vs线程性能
下一章:[[python_course:chapter30|第三十章:异步编程]]