2017-04-02 7 views
1

나는 WebSocket을 사용 하나를 포함, 전 플라스크를 사용하여 일부 웹 사이트를 구축했지만, 이번에는 내가 시작하는 방법을 모르겠어요. 파이썬 플라스크 웹 사이트에서 끝없는 데이터 루프?

나는 현재 ZeroMQ 소켓에서 센서 데이터를 가져 파이썬에서 무한 루프가 있습니다. 대략 다음과 같습니다.

import zeromq 
socket = zeromq.create_socket() 
while True: 
    data_dict = socket.receive_json() 
    print data_dict # {'temperature': 34.6, 'speed': 12.8, etc.} 

이제 멋진 차트에서 들어오는 센서 데이터를 실시간으로 보여주는 대시 보드를 만들고 싶습니다. 파이썬에 있고 Flask와 웹 소켓에 익숙하기 때문에 이것을 사용하고 싶습니다. 내가 전에 내장

웹 사이트에는 그래도 기본적인 요청/기반 회신 사람이었다. 어떻게하면 연속 루프에서 Flask 웹 사이트를 만들 수 있습니까?

답변

1

웹 페이지는 사용자의 관점에서 합리적인 기간 내에 최신 값에 관심이있을 것입니다 ..., 말 3 초, 별도의 스레드를 사용하여 백그라운드에서 값을 검색 할 수 있습니다.

는 백그라운드에서 최신 값을 업데이트 할 threading 모듈을 사용하는 방법의 예입니다 : 귀하의 경우

import threading 
import random 
import time 

_last_value = None 

def get_last_value(): 
    return _last_value 

def retrieve_value(): 
    global _last_value 
    while True: 
     _last_value = random.randint(1, 100) 
     time.sleep(3) 


threading.Thread(target=retrieve_value, daemon=True).start() 

for i in range(20): 
    print(i, get_last_value()) 
    time.sleep(1) 

, 그것은 것 같은 뭔가 :

import threading 
import zeromq 

_socket = zeromq.create_socket() 
_last_data_dict = {} 

def get_latest_data(): 
    return _last_data_dict 

def retrieve_value(): 
    global _last_data_dict 
    while True: 
     _last_data_dict = _socket.receive_json() 

threading.Thread(target=retrieve_value, daemon=True).start() 
0

기본적으로, 당신이 필요한 것은 두 개의 프로세스가 동시에 액세스 할 수있는 스토리지의 형태이다. 단일 파이썬 실행 파일의 편안함을 떠나고 싶어하지 않는 경우 , 당신은 스레딩에 표시되어야합니다 https://docs.python.org/2/library/thread.html

그렇지 않으면, 당신은 두 개의 서로 다른 파이썬 스크립트 (센서 판독에 대해 하나, 플라스크 하나를) 쓸 수 있도록 하나는 파일에 쓰고 다음은 파일을 읽고 (또는 Linux에서 파이프를 사용하고 Windows가 제공하는 것은 전혀 모른다.) 동시에 두 프로세스를 실행하고 OS가 "스레딩"을 처리하게한다.

두 번째 방법은 성능을 돌보는 당신의 OS의 장점을 가지고 있지만, 당신은 잠금 및 파일을 읽는 자유를 많이 풀어. 이 서버가 귀하의 센서 스크립트를 기록하는 순간 읽는 경우 몇 가지 이상한 행동을 할 수 있지만 문제없이 비슷한 일을했고, 나는 어렴풋이 읽거나 쓰여 때마다 OS가 일치하는 파일 상태의주의를 기울여야한다 리콜 할 수 있습니다.