python - 为什么在 Linux 上导入 numpy 会增加 1 GB 的虚拟内存?

标签 python linux python-3.x numpy

我必须在只有几 GB 虚拟内存的资源受限环境中运行 python。更糟糕的是,作为应用程序设计的一部分,我必须从我的主进程中 fork 子进程,所有这些子进程都会在 fork 上收到相同数量的虚拟内存的写时复制分配。结果是,在仅 fork 1 - 2 个子进程后,进程组达到上限并关闭所有进程。最后,我无法删除 numpy 作为依赖项;这是一个严格的要求。

关于如何降低初始内存分配的任何建议?

例如

  1. 更改导入时分配给 numpy 的默认数量?
  2. 禁用该功能并强制 python/numpy 更动态地分配?


详情:

红帽企业 Linux 服务器版本 6.9(圣地亚哥)
Python 3.6.2
numpy>=1.13.3

裸解释器:

import os
os.system('cat "/proc/{}/status"'.format(os.getpid()))

# ... VmRSS: 7300 kB
# ... VmData: 4348 kB
# ... VmSize: 129160 kB

import numpy
os.system('cat "/proc/{}/status"'.format(os.getpid()))

# ... VmRSS: 21020 kB
# ... VmData: 1003220 kB
# ... VmSize: 1247088 kB  

最佳答案

谢谢你,skullgoblet1089,在 SO 和 https://github.com/numpy/numpy/issues/10455 上提出问题, 并进行回答。 引用您的 2018-01-24 帖子:

通过 export OMP_NUM_THREADS=4 减少线程将降低 VM 分配。

关于python - 为什么在 Linux 上导入 numpy 会增加 1 GB 的虚拟内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392773/

相关文章:

python - Conemu - 重用实例,但不将其带到前台

python - 将一个列表的元素分配给另一个列表的元素

html - 在 HTML 文件中查找特定标签

python - 如何使用networkx找到距源节点距离为2的节点?

python-3.x - 使用 Python 截断并重新编号与特定 id/组对应的列

python - 任何无需重命名列即可进行过滤的方法

python - 导入 scipy.stats 时,获取 'ImportError: DLL load failed: The specified procedure could not be found'

linux终端网络浏览器

linux - 在 bash 脚本中结合 sed 和 sort 命令

python - E : Package 'python-pip' has no installation candidate