以前に書き込まれたすべてのデータを共有メモリ (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'
2 番目の書き込み:b'{"ACTIVE": 1}WO": 2}\x00\x00\x00\x00'
2 番目の書き込みはインデックス 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''
たが、同じ結果になりました。
この結果を見てください:
First write: b'{"ONE": 1, "TWO": 2}\x00\x00\x00\x00'
Second write: b'{"ACTIVE": 1}\x00\x00\x00\x00'
without extra " WO": 2} " from first write
以前に書き込まれたすべてのデータを共有メモリに上書きする方法は?