2017-10-20 10 views
1

J'ai un fil qui mesure toutes les 10ms une valeur de tension (capturée à partir d'un périphérique externe), applique un filtrage passe-bas élémentaire et stocke la valeur dans une variable lp_voltage. Toutes les quelques secondes, le programme principal doit lire la valeur enregistrée dans lp_voltage.Lire la valeur d'un thread dans Python: file d'attente ou variable globale?

J'ai compris deux méthodes pour éventuellement faire avec le cadre threading:

Quelle est la meilleure option? Si les files d'attente sont mieux, comment les adapter à mon problème?

Répondre

1

La première méthode est OK si vous savez ce que vous faites.

Plus explication:

dans la méthode, vous devez vous assurer que vos deux fils ont accès à une variable partagée (lp_voltage ou v_queue). Quel est le réel avantage v_queue est la consistance. Si vous ne vous souciez pas de la consistance, vous pouvez simplement utiliser une variable. Pour mettre en œuvre ceci plus pythonic, vous pouvez envelopper votre projet entier dans un object. Par exemple:

class VoltageTask: 

    def __init__(self): 
     self.lp_voltage = 0 
     self.thread = Thread(target=self.update_voltage) 

    def update_voltage(self): 
     self.lp_voltage = your_function_to_get_voltage() 

    def main_thread(self): 
     ... 

    def start(self): 
     self.thread.start() 
     self.main_thread() 


if __name__ == "__main__": 
    task = VoltageTask() 
    task.start() 
+0

J'ai fini par utiliser une solution comme celle que vous proposez, et cela a bien fonctionné. La seule différence est que le code principal I est sorti de la classe, et appelé à la place lire la propriété 'lp_voltage' de l'objet' task'. –