尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写
📅 发布时间:2026/6/19 19:09:11

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写



示例代码:

点击查看代码
import multiprocessingdef f(ns):ns.x.append(1)ns.y.append("a")if __name__ == '__main__':manger = multiprocessing.Manager()ns = manger.Namespace()ns.x = []ns.y = []p = multiprocessing.Process(target=f, args=(ns,))p.start()p.join()print(ns.x)print(ns.y)

该代码运行的结果并不是 [1] 和 ['a'],而是:

image


由此可见对跨主机的共享内存的修改并不能简单的直接操作,根据资料显示可知,manger下的共享内存仅仅能传播如manager.list()这样的可变对象,如果我们不使用该种写法,就必须在子进展中手动的实现对manger空间下的变量的赋值操作。


修改后的代码:

点击查看代码
import multiprocessing"""
def f(ns):ns.x.append(1)ns.y.append("a")if __name__ == '__main__':manger = multiprocessing.Manager()ns = manger.Namespace()ns.x = []ns.y = []p = multiprocessing.Process(target=f, args=(ns,))p.start()p.join()print(ns.x)print(ns.y)
"""def f(ns, x, y):x.append(1)y.append("a")# ns.x = [11, 22, 33, [44, 55]]# ns.x = 0ns.x = xns.y = yns.z = 111if __name__ == '__main__':manger = multiprocessing.Manager()ns = manger.Namespace()ns.x = []ns.y = []p = multiprocessing.Process(target=f, args=(ns, ns.x, ns.y))p.start()p.join()print(ns.x)print(ns.y)print(ns.z)

运行结果:

image


由此可见,在子进程中传入的manager实例及其命令空间下的变量其实在传参时是一种copy操作,而不是引用操作,因此在子进程中的任何操作并不会改变共享内存下的变量的,因此我们需要在子进程中手动的来对共享内存命令空间下的变量进行手动赋值。


为此我们可以进行一种更极端的编程代码:

点击查看代码
import multiprocessing"""
def f(ns):ns.x.append(1)ns.y.append("a")if __name__ == '__main__':manger = multiprocessing.Manager()ns = manger.Namespace()ns.x = []ns.y = []p = multiprocessing.Process(target=f, args=(ns,))p.start()p.join()print(ns.x)print(ns.y)
""""""
def f(ns, x, y):x.append(1)y.append("a")# ns.x = [11, 22, 33, [44, 55]]# ns.x = 0ns.x = xns.y = yns.z = 111if __name__ == '__main__':manger = multiprocessing.Manager()ns = manger.Namespace()ns.x = []ns.y = []p = multiprocessing.Process(target=f, args=(ns, ns.x, ns.y))p.start()p.join()print(ns.x)print(ns.y)print(ns.z)
"""import time
def f(ns, x, y):for i in range(10):x.append(i)y.append(str(i))ns.x = xns.y = ytime.sleep(1)if __name__ == '__main__':manger = multiprocessing.Manager()ns = manger.Namespace()ns.x = []ns.y = []p = multiprocessing.Process(target=f, args=(ns, ns.x, ns.y))p.start()for i in range(10):print(ns.x)print(ns.y)time.sleep(1)p.join()print(ns.x)print(ns.y)

运行效果:

image


本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。 如果未特殊标注则为原创,遵循 CC 4.0 BY-SA 版权协议。

相关新闻

  • 详细介绍:UVa 11129 An Antiarithmetic Permutation
  • 3天掌握OpenHarmony+Python开发:高效适配教程与真实项目案例精讲 - 教程
  • 25.11.15随笔联考总结(补)

最新新闻

  • 面试被问“你的缺点是什么”,90%的应届生都答错了!(附满分话术)
  • Spring Cloud Alibaba 最佳实践:基于 Spring Boot 4.0 的完整微服务示例项目
  • 三步掌握AI斗地主:如何用DouZero智能助手提升你的游戏胜率
  • 2026山东大学项目实训个人博客(六)
  • DC/DC电源设计实战:从MIC261201选型到PCB布局与热管理全解析
  • 2026济南婚纱摄影选型全指南:行业标准、品牌梯队与合规避坑全解析 - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号