2013-08-06 2 views
0

작은 프로젝트에서이 단계에서 web.py가 내 Raspberry Pi에 연결된 일부 센서에서 얻은 정보를 표시하려고합니다. 정보를 정기적으로 가져오고 싶습니다. 그래서 내 라이브러리의 센서를 새로 고치고, 독서에 막대기를 집어 넣고 10 초 동안 잠자기하는 코드 하단에 루프를 넣습니다.web.py와 동시에 실행되는 루프를 얻으려고 시도했습니다.

while True: 
    onewiretemp.refreshSensor() 
    temperatures = onewiretemp.sensorTemp 
    time.sleep(10) 

불행하게도, 이것의 부작용은 내 프로그램을 실행하고, 페이지를로드 내 루프가 실행을 시도 할 때 페이지가로드되지 않을 것입니다. 또한 프로세스를 수동으로 종료하여 중지해야합니다. 루프가 무한정 실행되고 있기 때문입니다.

나머지 코드는 기본적으로 웹 템플릿 웹 사이트의 튜토리얼과 템플릿입니다. 이 부분은 루프를 비활성화하고 onewiretemp 모듈의 출력과 같은 형식의 데이터를 수동으로 추가 할 때 작동합니다.

이 모든 것을 해치지 않는 더 좋은 방법이 있습니까?

+0

최신의 온도만을 유지하고 있으며 수십 번/초의 다른 클라이언트에서이 서버를 치지 않으면 ... 10 초마다 확인해야 할 충분한 이유가 있습니까? 왜 각 요청을 확인하지 않습니까? – abarnert

+0

결국 나는 값을 수집하고 시간이 지남에 따라 그래프를 표시하기를 희망했습니다. 짧은 점검 기간은 주로 디버깅 목적이었고, CRC가 실패하는 배선 문제가 있었기 때문에 여러 번 테스트를 해보고 싶었습니다. 프로젝트를 마칠 때마다 10 분에서 30 분마다 점검 할 것입니다. – Ben

+0

좋습니다. 그리고 tdelaney의 대답은 '온도'가 여러 값의 목록 인 경우에도 마찬가지로 작동합니다. 폴링 스레드에서 자물쇠를 잡고 목록에 '추가'합니다. web.py 스레드에서 잠금을 잡고 반환 할 수있는 것으로 목록을 복사 한 다음 목록을 지우십시오. – abarnert

답변

1

센서 폴링 루프를 별도의 스레드에서 실행하십시오. 온도를 읽거나 쓸 때 자물쇠로 온도를 보호하십시오. 주요 web.py 스크립트는 잠금 장치를 잡고 최신 데이터를 가져올 수 있습니다.

관련 문제