Python Flask网站来自无尽的数据循环?

时间:2017-04-02 14:00:08

标签: python loops flask zeromq

我之前使用Flask构建了一些网站,包括使用websockets的网站,但这次我不确定如何开始。

我目前在Python中有一个无限循环,它从ZeroMQ套接字获取传感器数据。它大致如下:

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

我现在想创建一个仪表板,在一些漂亮的图表中实时显示传入的传感器数据。因为它是用Python而且我熟悉Flask和websockets我想用它。

我之前建立的网站虽然是基本的请求/回复。我怎么能从连续循环中创建一个Flask网站呢?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

基本上,您需要的是两个进程可以同时访问的某种形式的存储。 如果你不想放弃一个python可执行文件,你应该考虑线程: https://docs.python.org/2/library/thread.html

否则,您可以编写两个不同的python脚本(一个用于传感器读数,一个用于烧瓶),让一个写入文件,下一个读取它(或在Linux中使用管道,不知道Windows提供什么),并同时运行两个进程,让你的操作系统处理"线程"。

第二种方法的优点是操作系统可以处理性能,但是在锁定和读取文件时会失去很多自由。如果您的服务器在您的传感器脚本写入的瞬间读取,可能会有一些奇怪的行为,但我做了类似的事情没有问题,我朦胧地回忆起操作系统应该在读或写时处理一致的文件状态到。