gpt4 book ai didi

python - 创建多处理数组时出现段错误

转载 作者:太空狗 更新时间:2023-10-29 20:50:51 24 4
gpt4 key购买 nike

我正在尝试使用多处理填充一个 numpy 数组,遵循 this post .我的东西在我的 Mac 上运行良好,但是当我将它移植到 Ubuntu 时,我经常遇到段错误。

我已将代码缩减为以下最小示例:

import numpy as np
from multiprocessing import sharedctypes

a = np.ctypeslib.as_ctypes(np.zeros((224,224,3)))
print("Made a, now making b")
b = sharedctypes.RawArray(a._type_, a)
print("Finished.")

在 Ubuntu 16.04 上,使用 Python 3.6.5 和 numpy 1.15.4(与我的 Mac 上的版本相同),我得到了输出

Made a, now making b
Segmentation fault (core dumped)

现在,我可以稍微更改数组维度,在某些情况下它会起作用(例如,将前 224 更改为 100 并且它会起作用)。但主要是它会出现故障。

谁能提供任何见解?

我看到 one post on a related topic from 2016 that no one responded to , 和 another one involving pointers我没有使用。

PS- 我将 a 指定为多维数组还是扁平化数组(例如 np.zeros( 224*224*3))。如果我更改数据类型(例如 float 到 int),它似乎也没有什么区别;它同样失败。

进一步更新:甚至在 original post 的代码中设置“size=224”在具有不同版本的 numpy 的两台不同的 Ubuntu 机器上导致段错误,但在 Mac 上工作正常。

最佳答案

这与其说是答案,不如说是猜测,但您可能会遇到底层数据缓冲区的垃圾回收问题。这可以解释为什么似乎依赖于您尝试创建的数组的整体大小。

如果是这种情况,那么解决方法是将您创建的 Numpy 零数组分配给它自己的变量。这将通过创建 RawArray 确保缓冲区“存在”。代码将是:

zs = np.zeros((224,224,3))
a = np.ctypeslib.as_ctypes(zs)
print("Made a, now making b")
b = sharedctypes.RawArray(a._type_, a)
print("Finished.")

我现在只有一台 mac,所以我无法自己测试。

关于python - 创建多处理数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53757856/

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