gpt4 book ai didi

python - 多处理——使用管理器命名空间来节省内存

转载 作者:行者123 更新时间:2023-11-28 22:25:16 24 4
gpt4 key购买 nike

我有几个进程,每个进程都需要一个大的 numpy 数组来完成任务,这只是被读取(线程正在搜索它以寻找合适的值)。

如果每个进程都加载数据,我会收到内存错误。

因此,我试图通过使用管理器在进程之间共享相同的数组来尽量减少内存使用量。

但是我仍然收到内存错误。我可以在主进程中加载​​一次数组,但是当我试图让它成为管理器命名空间的属性时,我收到了一个内存错误 .我假设管理器就像指针一样,并允许单独的进程(通常只能访问它们自己的内存)也可以访问这个共享内存。但是错误提到酸洗:

Traceback (most recent call last):
File <PATH>, line 63, in <module>
ns.pp = something
File "C:\Program Files (x86)\Python35-32\lib\multiprocessing\managers.py", line 1021, in __setattr__
return callmethod('__setattr__', (key, value))
File "C:\Program Files (x86)\Python35-32\lib\multiprocessing\managers.py", line 716, in _callmethod
conn.send((self._id, methodname, args, kwds))
File "C:\Program Files (x86)\Python35-32\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(ForkingPickler.dumps(obj))
File "C:\Program Files (x86)\Python35-32\lib\multiprocessing\reduction.py", line 50, in dumps
cls(buf, protocol).dump(obj)
MemoryError

我假设 numpy 数组在分配给管理器时实际上被复制了,但我可能错了。

更令人恼火的是,我在一台内存为 32GB 的机器上观察内存使用情况,它只在崩溃前增加了一点,最多可能增加 5%-10%。

有人能解释一下为什么让数组成为命名空间的属性会占用更多内存吗?以及为什么我的程序不会使用一些可用的空闲内存? (我已经阅读了 namespacemanager 文档以及关于 SO 的这些 managersnamespace 线程。

我正在运行 Windows Server 2012 R2 和 Python 3.5.2 32 位。

下面是一些演示我的问题的代码(您需要使用 large.txt 的替代文件,这个文件是大约 75MB 的制表符分隔字符串):

import multiprocessing
import numpy as np

if __name__ == '__main__':

# load Price Paid Data and assign to manager
mgr = multiprocessing.Manager()
ns = mgr.Namespace()

ns.data = np.genfromtxt('large.txt')
# Alternative proving this work for smaller objects
# ns.data = 'Test PP data'

最佳答案

经理类型是为灵 active 而不是效率而构建的。他们创建一个保存值的服务器进程,并可以将代理对象返回给它们需要的每个进程。服务器和代理通过 tls 进行通信以允许服务器和代理位于不同的机器上,但这必然意味着复制任何对象有问题。我并没有一路追根溯源,所以多出的副本有可能在使用后被垃圾回收,但至少最初必须有一个副本。

如果你想要共享物理内存,我建议使用 Shared ctypes Objects .这些实际上确实指向内存中的一个公共(public)位置,因此速度更快,资源更少。它们不支持全胖 python 对象所做的所有相同的事情,但它们可以通过创建 structs 来扩展。组织您的数据。

关于python - 多处理——使用管理器命名空间来节省内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com