2017-10-20 60 views
1

我有一个线程,每10ms测量一个电压值(从外部设备捕获),应用一些初级低通滤波并将该值存储在变量lp_voltage中。主程序每隔几秒需要读取存储在lp_voltage中的值。从Python中的一个线程读取值:队列或全局变量?

我想通了两种方法可能做到这一点与threading框架:

什么样的选择最好?如果队列更好,如何使它们适应我的问题?

回答

1

如果您知道自己在做什么,那么第一种方法是可以的。

更多的解释:

在这两种方法中,你需要确保你的两个线程可以访问共享变量(lp_voltagev_queue)。真正的优势v_queue具有一致性。如果你不关心一致性,你可以简单地使用一个变量。

要实现这个更pythonic,你可以把你的整个项目包装成一个object。例如:

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

我结束了使用像你提议的解决方案,它工作得很好。唯一的区别是,将主代码从类中取出,而是读取'task'对象的'lp_voltage'属性。 –