gpt4 book ai didi

python - 与 Flask 服务器同时运行 while 循环

转载 作者:太空狗 更新时间:2023-10-30 00:31:53 26 4
gpt4 key购买 nike

我正在使用 python 更新一些 LED。我一直这样做:

from LEDs import *
myLEDs = LEDs()
done = False
while not done:
myLEDs.iterate()

我想使用 Flask 作为我可以在浏览器中运行的一些漂亮的 ReactJS 前端(以更改当前模式等)和 Python 中的 LED 控制代码之间的桥梁。

我的 Flask 工作正常,可以处理 HTTP 请求等。我想知道如何设置 myLEDs.iterate() 与我的同时持续运行(或快速运行) flask 应用程序,同时仍然能够相互通信,如下所示:

myLEDs = LEDs()

@app.route('/changePattern',methods=['POST'])
def changePattern():
n = request.json['num']
myLEDs.setPattern(n)
return jsonify(**locals())

if __name__ == '__main__':
app.debug = True
myLEDs.setToFrequentlyIterateAndStillTalkToFlask()
app.run()

我遇到了 celery,这似乎可以解决问题,但对于我的问题的简单性来说,这似乎有点过分了。

仅仅想要一个 UI 来管理我的 python 后端代码,使用 Flask 是否有点矫枉过正?是否有比 Celery 更简单的库用于在后台运行某些东西?

编辑

这是一个更大的项目的一部分,该项目旨在开发一个应用程序,该应用程序具有附加到 Python 后端的 Node-Webkit 前端。如果它看起来不可行,我愿意改变我对这个应用程序的方法。

最佳答案

使用多进程在 Flask HTTP 请求的不同进程中运行循环:

import time
from flask import Flask, jsonify
from multiprocessing import Process, Value


app = Flask(__name__)


tasks = [
{
'id': 1,
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}
]


@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})


def record_loop(loop_on):
while True:
if loop_on.value == True:
print("loop running")
time.sleep(1)


if __name__ == "__main__":
recording_on = Value('b', True)
p = Process(target=record_loop, args=(recording_on,))
p.start()
app.run(debug=True, use_reloader=False)
p.join()

任务部分来自here ,来 self 的多处理代码。
注意“use_reloader=False”部分。这是避免运行循环两次所必需的。原因见here

可以通过启动服务器来测试功能

python <your_name_for_the example>.py

和调用

curl -i http://localhost:5000/todo/api/v1.0/tasks

关于python - 与 Flask 服务器同时运行 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com