gpt4 book ai didi

Python3.4 : OSError: [Errno 12] Cannot allocate memory

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:48 27 4
gpt4 key购买 nike

我正在文件 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,结果还是同样的错误。关于如何规避此问题的任何想法?

最佳答案

multiprocessing.Lock() 的每个实例都将 /dev/shm/ 中的新信号量文件映射到内存中。

man mmap :

ENOMEM The process's maximum number of mappings would have been exceeded.

(错误号 12 定义为 ENOMEM。)

系统最大映射数由内核参数vm.max_map_count控制;您可以使用 /sbin/sysctl vm.max_map_count 读取它。毫无疑问,您会看到系统上的这个值明显低于您要创建的锁的数量。

有关更改 vm.max_map_count 的方法,请参阅 e。 G。这个Linux Forums thread .

关于Python3.4 : OSError: [Errno 12] Cannot allocate memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28839937/

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