У меня есть класс (AngleInfo) в файле (Display.py) с собственной переменной (WheelAngle), которая не обновляется после запуска функции (GetAngle). Эта функция вызывается в классе во втором файле (ManageInfo.py) с триггером, основанным на событиях. Когда я пытаюсь использовать WheelAngle во втором классе (AngleProcess) в Display.py, значение не обновляется при инициализации. Когда функция запускается в классе MessageHandler, она получает доступ к необработанным данным, представленным m
в объявлении GetAngle.
Существует другой класс (SpeedInfo) в другом файле (Radar.py), в котором обновляется собственная переменная (VehicleSpeed) после запуска соответствующей функции поиска информации (GetSpeed) в классе ManageInfo.
В рабочем случае есть система многопоточности, но после ее репликации в нерабочем случае улучшение не обнаружилось. Я не понимаю, почему WheelAngle не обновляется внутри класса и сравнение с рабочим случаем не приблизило меня к ответу.
Таким образом, в основном после запуска GetAngle я вижу, что WheelAngle имеет правильное значение внутри этой функции, но когда я вызываю переменную self в функции UpdatePlot класса AngleProcess в файле Display.py, я получаю начальное значение. Я даже пытался создать другую функцию в классе AngleInfo для доступа к WheelAngle, а затем вызвать эту функцию в функции UpdatePlot в классе AngleProcess, но результат тот же.
Имейте в виду, что рабочий пример невозможен, поскольку он требует отправки данных в реальном времени. Кроме того, хотя WheelAngle и VehSpeed, похоже, не используются, приведенный ниже код для простоты опущен!
Есть идеи? Ниже приведен пример кода. Спасибо!
Display.py
class AngleInfo():
def __init__(self):
self.WheelAngle = 0
def GetAngle(self,m):
self.WheelAngle = float(m) # Angle is correct
class AngleProcess():
def __init__(self):
self.AngleInfoObj = AngleInfo()
def UpdatePlot(self,tupledata):
WheelAngle = self.AngleInfoObj.WheelAngle # Angle is set to initial
Radar.py
class SpeedInfo(threading.Thread):
def __init__(self,page):
threading.Thread.__init__(self)
self.daemon = True
self.start()
self.VehSpeed = 0
def run(self):
VehSpeed = self.VehSpeed # Speed is correct
def GetSpeed(self,m):
self.VehSpeed = float(m) # Speed is correct
ManageInfo.py
from AurixCAN import Receiver
from Radar import SpeedInfo
from Display import AngleInfo
class MessageHandler:
def __init__(self,page):
self.SpeedInfo = SpeedInfo(page)
self.AngleInfo = AngleInfo()
DataSet = Receiver(canIDsandCalls={0xE:[self.SpeedInfo.GetSpeed,self.AngleInfo.GetAngle]})