在当今多核CPU普及的时代,利用Python multiprocessing库进行多进程编程已成为提升程序性能的重要手段。本文将从零开始,手把手教你如何使用multiprocessing模块实现并行计算和进程间通信,即使你是编程小白也能轻松上手!
Python由于全局解释器锁(GIL)的限制,在多线程中无法真正实现CPU密集型任务的并行执行。而多进程编程可以绕过GIL,让每个进程拥有独立的Python解释器和内存空间,从而充分利用多核CPU资源。
最基础的用法是使用Process类创建新进程:
import multiprocessingimport timedef worker(name): print(f'进程 {name} 开始执行') time.sleep(2) print(f'进程 {name} 执行完毕')if __name__ == '__main__': # 创建进程对象 p = multiprocessing.Process(target=worker, args=('Worker-1',)) # 启动进程 p.start() # 等待进程结束 p.join() print('主进程结束') 注意:必须将进程创建和启动代码放在if __name__ == '__main__':块中,这是为了防止在Windows系统上出现递归创建进程的问题。
我们可以创建多个进程并同时运行它们:
import multiprocessingimport timedef task(task_id): print(f'任务 {task_id} 开始') time.sleep(2) print(f'任务 {task_id} 完成')if __name__ == '__main__': processes = [] # 创建5个进程 for i in range(5): p = multiprocessing.Process(target=task, args=(i,)) processes.append(p) p.start() # 等待所有进程完成 for p in processes: p.join() print('所有任务已完成') 当需要处理大量相似任务时,使用Pool类更加高效:
import multiprocessingdef square(x): return x * xif __name__ == '__main__': numbers = [1, 2, 3, 4, 5] # 创建包含4个工作进程的进程池 with multiprocessing.Pool(processes=4) as pool: results = pool.map(square, numbers) print(f'计算结果: {results}') # 输出: 计算结果: [1, 4, 9, 16, 25] 多进程之间默认无法共享内存,但可以通过以下方式实现进程间通信:
import multiprocessingdef producer(queue): for i in range(5): queue.put(f'消息-{i}') queue.put(None) # 发送结束信号def consumer(queue): while True: item = queue.get() if item is None: break print(f'收到: {item}')if __name__ == '__main__': queue = multiprocessing.Queue() p1 = multiprocessing.Process(target=producer, args=(queue,)) p2 = multiprocessing.Process(target=consumer, args=(queue,)) p1.start() p2.start() p1.join() p2.join() import multiprocessingdef sender(conn): conn.send('Hello from sender!') conn.close()def receiver(conn): msg = conn.recv() print(f'接收到消息: {msg}')if __name__ == '__main__': parent_conn, child_conn = multiprocessing.Pipe() p1 = multiprocessing.Process(target=sender, args=(parent_conn,)) p2 = multiprocessing.Process(target=receiver, args=(child_conn,)) p1.start() p2.start() p1.join() p2.join() 有时我们需要多个进程访问同一块数据,可以使用Value或Array:
import multiprocessingdef increment(counter, lock): for _ in range(1000): with lock: # 使用锁保证原子操作 counter.value += 1if __name__ == '__main__': counter = multiprocessing.Value('i', 0) # 'i' 表示整数类型 lock = multiprocessing.Lock() processes = [] for _ in range(4): p = multiprocessing.Process(target=increment, args=(counter, lock)) processes.append(p) p.start() for p in processes: p.join() print(f'最终计数值: {counter.value}') # 应该输出 4000 通过本教程,你已经掌握了Python multiprocessing库的核心用法,包括创建进程、使用进程池、进程间通信以及共享内存等关键技术。这些知识将帮助你在实际项目中实现高效的并行计算,充分发挥多核CPU的性能优势。
记住:多进程适合CPU密集型任务,而对于I/O密集型任务,多线程或异步编程可能是更好的选择。合理选择并发模型,才能写出高性能的Python程序!
关键词回顾:Python multiprocessing、多进程编程、并行计算、进程间通信
本文由主机测评网于2025-12-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212097.html