0

以前に書き込まれたすべてのデータを共有メモリ (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

以前に書き込まれたすべてのデータを共有メモリに上書きする方法は?

4

1 に答える 1