【发布时间】:2015-05-04 14:01:27
【问题描述】:
我正在 dijk_inner_mp.py 文件中初始化一堆 1048576 x 16 长的多处理数组:
N1=1048576
DEG1=16
P1=1
W = [[0 for x in range(DEG1)] for x in range(N1)]
W_index = [[0 for x in range(DEG1)] for x in range(N1)]
u = multiprocessing.Array('i',range(P1))
D = multiprocessing.Array('i',range(N1))
Q = multiprocessing.Array('i',range(N1))
l = [multiprocessing.Lock() for i in range(0,N1)]
在初始化之后,我创建了 P1 个在分配的数组上工作的进程。但是,我在执行时一直遇到此错误:
File "dijk_inner_mp.py", line 20, in <module>
l = [multiprocessing.Lock() for i in range(0,N1)]
File "dijk_inner_mp.py", line 20, in <listcomp>
l = [multiprocessing.Lock() for i in range(0,N1)]
File "/usr/lib/python3.4/multiprocessing/context.py", line 66, in Lock
return Lock(ctx=self.get_context())
File "/usr/lib/python3.4/multiprocessing/synchronize.py", line 163, in __init__
SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
File "/usr/lib/python3.4/multiprocessing/synchronize.py", line 60, in __init__
unlink_now)
OSError: [Errno 12] Cannot allocate memory
在看到有关该问题的其他一些问题后,我尝试将交换文件大小增加几 Gb,但这似乎没有帮助。我还将大小从 1M 减小到 131K 并最终出现相同的错误。有关如何规避此问题的任何想法?
【问题讨论】:
-
cat /proc/swaps输出什么? -
使用的文件名类型大小优先级 /dev/sda1 分区 3298300 42496 -1
-
它创建了一个锁数组。如果我删除它,那么会出现错误 Q = multiprocessing.Array('i',range(N1)) 或任何其他数组
-
我可以在 C/C++ 中运行类似的代码,这意味着内存量绝对不是问题。似乎有些东西限制了 python 进程可以使用的内存,因此它触发了这个断言。
-
你说得对,我在运行代码时出错了,我每次在
65112锁周围都会出错
标签: python linux memory memory-leaks multiprocessing