gpt4 book ai didi

python - 使用 numpy.memmap 映射设备文件

转载 作者:太空狗 更新时间:2023-10-29 11:20:31 25 4
gpt4 key购买 nike

使用 numpy 的 memmap 打开设备文件(而不是常规文件)是否有原因不起作用?

self.surface = np.memmap('/dev/fb1', dtype=np.uint16, mode='r+', shape=(320,240))

我正在使用一个自定义内核模块,它添加了一个帧缓冲设备,它可以很好地与 python 的常规 mmap 模块一起工作。但是使用 numpy 似乎会在访问文件系统或其他东西时挂起内核的互斥量(我真的不确定到底发生了什么)。

我的问题是,这是 numpy 的 memmap 无法处理的问题,我应该采取不同的方式吗?

我在 unix stackexchange 上问了另一个问题,但我觉得这是 2 个不同的问题,所以我将它们都发布了。

显然这是在 linux 上(带有自定义内核模块的 kubuntu 特立独行)

更新:

好吧,事实证明我可以很好地创建 memmap。问题似乎是,当我关闭进程而没有特别关闭 memmap 对象时,它只会卡在内核中的互斥体上。

我不知道这个问题是出在 numpy、我的内核模块还是其他地方。

最佳答案

如果您的代码与 python mmap 模块一起工作正常,您可以直接使用它而不是 numpy.memmap:

>>> fd = os.open("a", os.O_RDWR)
>>> buffer = mmap.mmap(fd, 0)
>>> surface = np.ndarray((320,240), np.uint16, buffer)

这还有另一个好处,就是您可以更好地控制所使用的内存映射。

现在,python 的mmap 有它自己的特点。作为source显示,它在释放时调用 msync。也许这是你的程序挂起的地方? (您可以使用 buffer.flush() 重现您的问题,它也调用 msync)。您首先调用 close() 的解决方案可能有效,因为它绕过了 msync!

关于python - 使用 numpy.memmap 映射设备文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988465/

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