Python 脚本与将内容传输到客户端的 Python Flask 服务器通信的最佳方式是什么?

What is the best way for a Python script to communicate with a Python Flask server that transports content to the client?

以下场景:

我有一个 Raspberry Pi 运行 作为服务器。目前我在 Flask 中使用 Python 脚本,我也可以从我的 PC 访问 Raspberry Pi。 (烧瓶服务器运行一个反应应用程序。)

但功能应该扩展。它应该如下所示:

第二个 Python 脚本一直是 运行。此 Python 脚本每秒从外部 API 获取数据并进行处理。如果满足某些条件,则应处理数据,然后将数据传送到 Python Flask 服务器。然后 Flask 服务器将数据转发到计算机上的网站运行。

这种“进程间通信”的编程方式或方法是最好的。有图书馆吗?我尝试了 Celery,但是当我想访问外部 API 时它会抛出我的第二个 Python 脚本,所以我不知道这是否是正确的选择。

还有什么是最好的方法?穿线?直接进程间通信?

如果重要的话,这是我的服务器应用程序到目前为止的样子:

from gevent import monkey
from flask import Flask, render_template
from flask_socketio import SocketIO
monkey.patch_all()

app = Flask(__name__, template_folder='./build', static_folder='./build/static')
socket_io = SocketIO(app)


@app.route('/')
def main():
    return render_template('index.html')


@socket_io.on('fromFrontend')
def handleInput(input):
    print('Input from Frontend: ' + input)
    send_time()


@socket_io.on('time')
def send_time():
    socket_io.emit('time', {'returnTime': "some time"})


if __name__ == '__main__':
    socket_io.run(app, host='0.0.0.0', port=5000, debug=True)

好吧,我找到了针对我的特定问题的解决方案,我用一个线程实现了它,如下所示:

import gevent.monkey
gevent.monkey.patch_all()


from flask import Flask, render_template
from flask_socketio import SocketIO
import time
import requests
from threading import Thread


app = Flask(__name__, template_folder='./build', static_folder='./build/static')
socket_io = SocketIO(app)


@app.route('/')
def main():
    thread = Thread(target=backgroundTask)
    thread.daemon = True
    thread.start()
    return render_template('index.html')


@socket_io.on('fromFrontend')
def handleInput(input):
    print('Input from Frontend: ' + input)

@socket_io.on('time')
def send_time():
    socket_io.emit('time', {'returnTime': 'hi frontend'})


def backgroundTask():
    # do something here
    # access socket to push some data
    socket_io.emit('time', {'returnTime': "some time"})


if __name__ == '__main__':
    socket_io.run(app, host='0.0.0.0', port=5000, debug=True)