Python 3.8 新增 multiprocessing.SharedMemory 支持共享内存

栏目: Python · 发布时间: 6年前

内容简介:Python 在 2019-02-25 释出了 3.8 早期预览版在 POSIX 平台下共享内存创建过程如下:

Thu 28 February 2019

Python 在 2019-02-25 释出了 3.8 早期预览版 3.8.0a2 ,其中新增了 multiprocessing.SharedMemory 用以支持共享内存,大大提高多进程之间通信效率。简单看了一下实现代码主要涉及如下 Python 模块

  • Python 3.3 新增的内置类型 memoryview
  • Python 3.2 新增的 mmap

在 POSIX 平台下共享内存创建过程如下:

  1. 基于 tmpfs 打开或创建具名(文件名)的共享内存,得到文件描述符
  2. 通过 mmap 将文件描述符映射进程的内存地址空间
  3. 通过 memoryview 直接访问经过 mmap 映射后的的内存地址空间

锁的问题

memoryview 通过如下方式使用:

s = bytearray(b'aaa')
m = memoryview(s)
m[0] = 98
print(s)  # outputs: bytearray(b'baa')

当上面代码执行 m[0] = 98 时实际上调用的是 C 代码 memory_ass_sub ,然后调用 PACK_SINGLE 通过 memcpy 覆盖指针原有的值。

所以直接操作 multiprocessing.SharedMemory 会产生数据竞争,不应该直接使用,应该使用 multiprocessing.Valuemultiprocessing.Array 这种更高层的抽象,锁在这一层级实现。

参见

更多关于共享内存参见:


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

怎样解题

怎样解题

[美] G. 波利亚 / 涂泓、冯承天 / 上海科技教育出版社 / 2007-5 / 16.00元

怎样解题:数学思维的新方法,ISBN:9787542843876,作者:(美)波利亚 著;徐泓、冯承天 译一起来看看 《怎样解题》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具