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 这种更高层的抽象,锁在这一层级实现。

参见

更多关于共享内存参见:


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

查看所有标签

猜你喜欢:

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

高质量程序设计艺术

高质量程序设计艺术

斯皮内利斯 / 韩东海 / 人民邮电出版社 / 2008-1 / 55.00元

在本书中,作者回归技术层面。从Apache web server、BSD版本的Unix system、ArgoUMl、ACE网络编程库等著名开源软件中选取了大量真实C、C++和java语言源代码,直观而深刻的阐述了代码中可能存在的各种质量问题,涉及可靠性、安全性、时间性和空间性、可移植性、可维护性以及浮点运算等方面,很多内容都市独辟蹊径,发前人所未发。正因如此,本书继作者的《代码阅读》之后在获Jo......一起来看看 《高质量程序设计艺术》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码