Могу ли я определить объект очереди «глобально», чтобы использовать его в подфункции для динамического c графика (Python)? - PullRequest
1 голос
/ 15 января 2020

Я записываю несколько сенсорных кадров (каждый кадр является массивом со значениями) в очереди. Эта очередь должна быть определена глобально, чтобы сохранить кадры, если она используется в подфункции. Эта подфункция удаляет некоторые кадры в очереди с помощью команды 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()
...