Мне нужно перезаписать все ранее записанные данные в общей памяти (multiprocessing.shared_memory).
Вот пример кода:
from multiprocessing import shared_memory
import json
shared = shared_memory.SharedMemory(create=True, size=24, name='TEST')
data_one = {'ONE': 1, 'TWO': 2}
data_two = {'ACTIVE': 1}
_byte_data_one = bytes(json.dumps(data_one), encoding='ascii')
_byte_data_two = bytes(json.dumps(data_two), encoding='ascii')
# First write to shared memory
shared.buf[0:len(_byte_data_one)] = _byte_data_one
print(f'Data: {shared.buf.tobytes()}')
# Second write
shared.buf[0:len(_byte_data_two)] = _byte_data_two
print(f'Data: {shared.buf.tobytes()}')
shared.close()
shared.unlink()
Вывод:
Первая запись:b'{"ONE": 1, "TWO": 2}\x00\x00\x00\x00'
Вторая запись: b'{"ACTIVE": 1}WO": 2}\x00\x00\x00\x00'
Вывод понятен, поскольку вторая запись начинается с индекса 0 и заканчивается длиной _byte_data_two
. (shared.buf[0:len(_byte_data_two)] = _byte_data_two
)
Мне нужно, чтобы каждая новая запись в общую память перезаписывала все предыдущие данные.
Я пробовал shared.buf[0:] = b''
перед каждой новой записью в общую память, нов итоге получил
ValueError: memoryview assignment: lvalue and rvalue have different structures
Также я пробовал это shared.buf[0:len(_bytes_data_two)] = b''
после каждой новой записи с тем же результатом.
Просмотр этого результата:
Первая запись: b'{"ONE": 1, "TWO": 2}\x00\x00\x00\x00'
Вторая запись: b'{"ACTIVE": 1}\x00\x00\x00\x00'
без лишних " WO": 2}"с первой записи
Как перезаписать все ранее записанные данные в общей памяти