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)
以下场景:
我有一个 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)