请教在 shell 里启动的两个 Python 进程之间要如何共享一个对象?

2021-12-22 19:04:18 +08:00
 nmecury

请教各位一个问题:

在 shell 里起两个 python 任务,这两个 python 进程之间是否有什么办法可以共享一个对象( OrderedDict 之类的),一个进程只读,一个进程只写? 我目前采用的方案是用 pickle.dumps 将这个对象(比如 OrderedDict )序列化成 bytes 类型,然后放到 SharedMemory 里,通过一个 name 来实现共享,但是感觉序列化这一步有点慢,求教有没有更快的方法。

并非不想用 multiprocessing ,一方面 python 的多线程有点蛋疼,另一方面涉及到深度学习库和 GPU 运算,担心 multiprocessing 搞不定……

3730 次点击
所在节点    Python
24 条回复
Juszoe
2021-12-23 20:43:46 +08:00
请直接提问原问题,深度学习那么多现成多机计算方案不用,一定要自己从头造吗
nmecury
2021-12-24 10:22:49 +08:00
统一回复 #9 #11 #13 #21 ,感谢你们的建议,原始需求就是一个 environment 巨慢无比的 DRL 。我本来是做 DL 的,赶鸭子上架要搞 RL ,情况复杂只能在现有代码上做个快速迭代,就遇到了上述问题。用 ray 当然好,但是短时间内条件不允许,过阵子缓一缓再用 ray 重构一下。
necomancer
2021-12-29 15:45:20 +08:00
看你还有后续需求的样子……试试 mpi4py ?
Pho3nix
2021-12-30 17:14:30 +08:00
之前大概的方法就是获取内存地址,然后根据地址读取,中间用 socket 发送地址

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/823833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX