Самостоятельная переменная не обновляется после запуска функции в другом классе - PullRequest
1 голос
/ 28 июня 2019

У меня есть класс (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]})
...