""" 共享内存工具 """ import multiprocessing import msgpack # 内容长度数据 __HEADER_CONTENT_LENGTH = 6 # 编号的位数 __HEADER_NUMBER_LENGTH = 4 __start_number = 0 def create_array(length=100 * 10000): """ 创建共享内存 @param length: 长度 @param with_number: 是否写入编号 @return: """ global __start_number __start_number += 1 arr = multiprocessing.Array('c', length) length_str = str(__start_number).zfill(__HEADER_NUMBER_LENGTH).encode() for i in range(__HEADER_NUMBER_LENGTH): arr[i] = length_str[i] return arr def get_number(arr: multiprocessing.Array): """ 获取编号 @param arr: @return: """ return int(arr[:__HEADER_NUMBER_LENGTH].decode()) def set_datas(arr: multiprocessing.Array, datas): """ 将数据设置到共享内存中 @param arr: @param datas: @return: """ st = msgpack.packb(datas) length = len(st) length_str = str(length).zfill(__HEADER_CONTENT_LENGTH).encode() for i in range(__HEADER_CONTENT_LENGTH): arr[__HEADER_NUMBER_LENGTH + i] = length_str[i] arr[ __HEADER_NUMBER_LENGTH + __HEADER_CONTENT_LENGTH: __HEADER_NUMBER_LENGTH + __HEADER_CONTENT_LENGTH + length] = st def read_datas(arr: multiprocessing.Array): """ 读取数据 @param arr: @return: 原始格式的数据 """ length = int(arr[__HEADER_NUMBER_LENGTH:__HEADER_NUMBER_LENGTH + __HEADER_CONTENT_LENGTH].decode()) content = arr[ __HEADER_NUMBER_LENGTH + __HEADER_CONTENT_LENGTH:__HEADER_CONTENT_LENGTH + __HEADER_NUMBER_LENGTH + length] datas = msgpack.unpackb(content) return datas