python3.8 新增功能 共享内存

Python014

python3.8 新增功能 共享内存,第1张

write.py

from multiprocessing import shared_memory

import time

a = shared_memory.ShareableList(['no'], name='123') # 创建共享内存,并且写值

count = 0

while True:

time.sleep(0.1)

count += 1

print(count)

if a[0] == 'yes':

break

if count >= 100:

break

a.shm.close()

a.shm.unlink()

update.py

from multiprocessing import shared_memory

a = shared_memory.ShareableList(name='123') # 更新共享内存

a[0] = 'yes'

参考: https://docs.python.org/3/library/multiprocessing.shared_memory.html

在磁盘上建立一个文件,每个进程存储器中,单独开辟一个空间来映射保存到实际硬盘,实际并没有反映到主存上。

使得进程之间通过映射同一个普通文件实现共享内存,普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

每个进程的共享内存都直接映射到实际物理存储器上shm保存到物理存储器(主存),实际的存储量直接反映到主存上。

进程间需要共享的数据被放在一个叫做 IPC共享内存区域 的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。

通过shmget获得或创建一个IPC共享内存区域,并返回相应的标识符。

每一个共享内存区都有一个控制结构struct shmid_kernel。

主要API :shmget()、shmat()、shmdt()及shmctl()。

ps:Python开启多进程使用的是multiprocessing,进程传递了一个multiprocessing.Queue,使用的是shm共享内存机制。multiprocessing模块Value Array是基于mmap实现

1. Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)

2. MySQL数据库charset=utf-8

3. Python连接MySQL是加上参数 charset=utf8

4. 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)