Я записываю несколько сенсорных кадров (каждый кадр является массивом со значениями) в очереди. Эта очередь должна быть определена глобально, чтобы сохранить кадры, если она используется в подфункции. Эта подфункция удаляет некоторые кадры в очереди с помощью команды get () и заполняет их новыми кадрами с помощью команды put (), после этого пополнения происходит оценка (с помощью операции fft), этот новый результат обновляет график (подфункция возвращает линия,). Для отображения результатов я использую команду FuncAnimation () (она повторяет вызов этой подфункции, чтобы обеспечить динамический график c). Поэтому, чтобы обеспечить это, важно сохранить кадры в очереди, чтобы они не были удалены, когда функция FuncAnimation вызовет его снова.
Мой вопрос: как мне сохранить очередь (с предварительно загруженными сенсорными кадрами), чтобы я мог вызвать ее в этой подфункции?
Или эта дырочная структура не подходит для решения такого рода задач? Может быть, Singleton Concept или другая OOP техника?
#.....
#.....
def main():
#........
#......
def read(n_frames=1):
"""Gets frame data from module"""
data = []
for i in range(n_frames):
# reads sensorframes
#...
return data
def datagen(i): # def datagen(frames) ???
framecount = 0
getcount = 0
fillcount= 0
frames = Queue() # ?????
while getcount < 10:
frames.get()
getcount +=1
while fillcount < 10:
#read frames from sensor
#....
#...
frames.put(frame)
fillcount += 1
l = list(frames.queue)
rd_history = np.array(l)
if fillcount >= 10:
#.....
#.....
line.set_ydata(fft)
return line,
history = 100
frames = Queue() # ??? definition of this queue
rd_history = read(history) # this is for initialising the FuncAnimation
#......
#......
fig, ax = plt.subplots()
#...
line, = ax.plot(fft)
#....
ani = FuncAnimation(fig, datagen,frames=1, blit=True, interval=2000) # repeats calling datagen
#......
#.......
plt.show()