python中使用multiprocessing模块可通过多进程提升性能,尤其适合计算密集型任务。1. 创建并启动进程使用process类,通过target指定函数,start()启动,join()确保主进程等待;2. 多个进程并发执行可循环创建多个process实例并启动,适用于任务相互独立的情况;3. 使用pool进程池管理大量进程,常见方法有map、apply_async和starmap,with pool(…)推荐写法自动管理资源;4. 进程间通信通过queue、pipe、value/array和manager实现,支持数据传递与共享。掌握这些内容即可灵活优化程序性能。

在Python中,使用多进程(multiprocessing)是提升程序性能、充分利用多核CPU的有效方式。尤其当你需要处理大量计算密集型任务时,多进程比多线程更合适,因为它是绕过GIL(全局解释器锁)限制的一种手段。

下面我们就来看看如何在Python中使用multiprocessing模块进行多进程编程。
1. 创建并启动一个进程
最基础的用法就是通过Process类来创建一个新的进程。和threading.Thread类似,但不同的是每个进程拥有独立的内存空间。
立即学习“Python免费学习笔记(深入)”;

from multiprocessing import Processimport osdef show_pid(): print(f"当前进程ID: {os.getpid()}")if __name__ == "__main__": p = Process(target=show_pid) p.start() p.join()
target:指定要运行的函数;start():启动子进程;join():等待子进程执行完毕再继续主进程;
小提示:如果你不加join(),主进程可能在子进程还没执行完就结束了,导致输出不全或看不到结果。
2. 多个进程并发执行
实际应用中,我们往往需要同时运行多个进程来处理不同的任务。可以通过循环创建多个Process实例,并依次启动它们。

processes = []for i in range(4): p = Process(target=show_pid) processes.append(p) p.start()for p in processes: p.join()
启动多个进程后记得都调用join();如果不控制顺序,所有进程会“几乎”同时开始执行;这种方式适合任务之间相互独立的情况。
3. 使用进程池(Pool)管理大量进程
当你需要处理几十甚至上百个任务时,手动管理每个进程效率太低,这时候应该使用Pool进程池。
from multiprocessing import Pooldef square(x): return x * xif __name__ == "__main__": with Pool(4) as pool: # 启动4个进程 results = pool.map(square, range(10)) print(results)
常见方法:
map(func, iterable):将可迭代对象分发给多个进程;apply_async(func[, args]):异步执行函数;starmap():支持传入多个参数的map版本;
注意:
with Pool(...)是推荐写法,它能自动关闭资源,避免忘记调用pool.close()和pool.join()。
4. 进程间通信与数据共享
由于每个进程都有自己独立的内存空间,所以不能像多线程那样直接共享变量。但multiprocessing提供了一些机制来实现进程间通信(IPC):
Queue:安全的队列,用于传递数据;Pipe:点对点通信,适用于两个进程;Value / Array:共享内存,适用于少量数据;Manager:更高级的共享方式,支持列表、字典等复杂结构。
例如使用Queue:
from multiprocessing import Process, Queuedef put_data(q): q.put("Hello from child")def get_data(q): print(q.get())if __name__ == "__main__": q = Queue() p1 = Process(target=put_data, args=(q,)) p2 = Process(target=get_data, args=(q,)) p1.start() p2.start() p1.join() p2.join()
基本上就这些。掌握好这些内容,你就可以在Python中灵活地使用多进程来优化你的程序了。虽然看起来有点复杂,但只要理解了基本逻辑和适用场景,用起来其实并不难。
以上就是Python中如何使用多进程?multiprocessing详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1363858.html
微信扫一扫
支付宝扫一扫