Administrator
4 天以前 245979e3907d34bcd88ac0c4547f399bf33a44de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
共享内存工具
"""
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