Есть ли способ еще больше увеличить частоту дискретизации в Python, если бы я использовал Qtimer? - PullRequest
1 голос
/ 07 мая 2020

Этот топи c задает несколько вопросов, но я думаю, что ни один из них не может решить мою проблему. Вот что у меня есть. У меня GUI написано на PyQt5. Существует функция с именем self.getValues, эта функция имеет несколько условий if and else, а затем записывает значения в текстовый файл. Время выполнения этой функции 0,0112. Эта функция прикреплена к Qtimer, время ожидания которого каждые 10 мс. Если я рассчитываю, он должен записывать 80-90 значений каждую секунду. Но я получаю только 9-10 значений в секунду. Моя общая программа слишком велика, поэтому для ясности я опубликую соответствующую часть.

self.getValues ​​

def geValues(self):
 self.firstRun.append(1)
 self.t = np.arange(1,len(self.firstRun)+1)
 gyro2.updateGyroValues()
 gyro2.updateHeadings()
 xi,yi,xii,yii,zii,s1,s2 = gyro2.printHeadings()
 xiii,yiii,ziii = compass.axes()
 self.roll.append(xii)
 self.rollDrift.append(s1)
 self.pitch.append(yii)
 self.pitchDrift.append(s2)
 self.rollAccel.append(xi)
 self.pitchAccel.append(yi)
 self.timeTaken = self.timeStamp()
 with open(self.fileName+'.txt','a') as file:
    file.write(str(self.timeTaken)+','+str(xii)+','+str(yii)+','+str(zii)+'\n') 
 print(time.time()-st)

Qtimer

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    timer_1 = QtCore.QTimer()
    timer_1.setInterval(1)
    timer_1.timeout.connect(ui.getValues)
    timer_1.start()
    MainWindow.show()
    sys.exit(app.exec_())

На мой взгляд, частота дискретизации зависит от этих двух функций. Если вы думаете, что я ошибаюсь, пожалуйста, дайте несколько предложений. Также я должен сказать, что моя программа не имеет никаких проблем, кроме скорости. Он работает и работает. Я буду признателен за любые подсказки / предложения.

Изменить: я использую несколько QTimer (), и каждый таймер привязан к отдельной функции. Я думал, что QTimer (ы) работают независимо (как потоки). Я попытался отключить все таймеры, кроме упомянутого выше, и это увеличило скорость обновления. Это означает, что я должен использовать Threading.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...