2017-10-20 4 views
1

나는 매 10ms마다 전압 값 (외부 장치에서 캡처 됨)을 측정하고, 기본 로우 패스 필터링을 적용하여 변수 lp_voltage에 값을 저장합니다. 몇 초마다 메인 프로그램은 lp_voltage에 저장된 값을 읽어야합니다. 스레드에서 global 키워드를 사용하여,Python의 한 스레드에서 값을 읽으십시오 : 큐 또는 전역 변수?

어떤 옵션이 가장 좋습니까? 대기열이 더 좋은 경우 어떻게 문제를 해결할 수 있습니까?

답변

1

무엇을하는지 알면 첫 번째 방법은 괜찮습니다.

더 설명 : 두 방법에서

, 당신은 두 개의 스레드가 공유 변수 (lp_voltage 또는 v_queue)에 액세스 할 수 있는지 확인해야합니다. v_queue의 실질적인 이점은 일관성입니다. 일관성에 신경 쓰지 않는다면 변수를 사용할 수 있습니다.

더 많은 파이썬을 구현하려면 전체 프로젝트를 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' 속성을 읽는 것입니다. –