memoryview 的使用场景到底是什么呢?

2020-12-07 16:57:09 +08:00
 xiaolinjia
我一直想知道 py 的 memoryview 能干嘛,但我平时看的一些技术书和博客,微信公众号都鲜有提及到这块,我平时写代码的时候,也没遇到要使用它的场景。我也查了下,memoryview 是有学习了 numpy 的思想,弄出来的数据结构,好像是用来共享内存不用进行复制操作?所以 memoryview 有什么比较常用的场景吗。
2085 次点击
所在节点    Python
9 条回复
wuwukai007
2020-12-07 17:09:33 +08:00
大矩阵计算,矩阵用一个,但是算法不一样,开多进程共享矩阵内存,就不需要每个进程复制一个大矩阵了,效率高,节省内存
guyskk0x0
2020-12-07 19:50:31 +08:00
http server, socket 相关场景有用到,可以避免复制内存,实现 zero copy 效果。
bilibilifi
2020-12-07 20:35:51 +08:00
cython 里可以很方便地暴露接口
mattx
2020-12-08 10:12:52 +08:00
@bilibilifi 问下 在 cython 的场景是怎么样的,贴个代码看看
ruanimal
2020-12-08 10:27:10 +08:00
zero copy
xiaolinjia
2020-12-08 10:42:04 +08:00
@guyskk0x0
@ruanimal
两位都提到了零拷贝的场景,但是 py 不是有 mmap 这个模块也提供了这个吗?这个和 mmap 的有啥不同呢?
ruanimal
2020-12-08 16:11:28 +08:00
@xiaolinjia

mmap 是共享内存。
zero copy 是为了避免重复 copy 对象,比如 socket 发包的时候,避免在多个缓冲区之间反复 copy 内存。zero copy 在 linux 下是基于 sendfile 实现的
xiaolinjia
2020-12-08 16:55:06 +08:00
@wuwukai007 你指的是 multiprocessing.Process(target=func1, args=memoryview(sth))、multiprocessing.Process(target=func2, args=memoryview(sth))吗,还是特指 py38 的 multiprocess.SharedMemory 。我看了下 SharedMemory 的源码,确实是有用到 memoryview 和 mmap 。
wuwukai007
2020-12-08 18:45:56 +08:00
python3.8 的新特性

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/733008

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX