Я использую PyQT5 и класс QSharedMemory. Я создаю общую память, которая может содержать 6 1-байтовых элементов. Чтобы скопировать эти элементы в массиве совместно используемой памяти, я перебираю элементы из списка python, как показано ниже:
f = shared_mem.data()
k = f.asarray()
memtocopy = [0,1,2,3,4,5]
for i in range(0,len(memtocopy)):
k[i] = memtocopy[i]
shared_mem.unlock()
Что выглядит очень не пифонично и похоже на шаблонный код. Мне интересно, есть ли более подходящий способ достижения того же результата?
При использовании
k[:] = memtocopy
или
k[:] = np.asarray(memtocopy,np.uint8)
Ошибка с сообщением об ошибке:
TypeError: can only assign another array of unsigned char to the slice
Весь тестовый код для воспроизведения выглядит следующим образом:
from PyQt5 import QtCore
# Create shared memory and attach it
shared_mem = QtCore.QSharedMemory()
shared_mem.setNativeKey("test")
shared_mem.create(4*6)
shared_mem.attach()
# Fill in
shared_mem.lock()
f = shared_mem.data()
k = f.asarray()
memtocopy = [0,1,2,3,4,5]
# Loop in question
for i in range(0,len(memtocopy)):
k[i] = memtocopy[i]
shared_mem.unlock()
# Read out
shared_mem.lock()
f1 = shared_mem.data()
k1 = f1.asarray()
shared_mem.unlock()
# Test results
if k1[0] == memtocopy[0]:
print("success!")
else:
print("fail!")