![](/img/trans.png)
[英]Asyncio run Dash (Flask) server with another coroutine concurrently
[英]Run while loop concurrently with Flask server
我正在使用python更新一些LED。 我這樣做是這樣的:
from LEDs import *
myLEDs = LEDs()
done = False
while not done:
myLEDs.iterate()
我想使用Flask作為我可以在瀏覽器中運行的一些漂亮的ReactJS前端(用於更改當前模式等)和Python中的LED控制代碼之間的橋梁。
我有Flask工作正常,可以處理HTTP請求等。我想知道如何設置myLEDs.iterate()
以與我的燒瓶應用程序同時連續運行(或快速運行),同時仍然能夠與彼此,像這樣:
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
,看起來它可以做到這一點,但對於我的問題是多么簡單來說似乎有些過分。
使用Flask overkill只是想讓UI管理我的python后端代碼? 是否有比Celery更簡單的庫用於在后台運行某些東西?
編輯
這是開發一個帶有連接到Python后端的Node-Webkit前端的應用程序的大型項目的一部分。 如果看起來不可行,我願意改變我對這個應用程序的方法。
使用multiprocess在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()
任務部分來自這里 ,來自我的多處理代碼。
請注意“use_reloader = False”部分。 這是避免兩次運行循環所必需的。 因為這里看到的原因
可以通過啟動服務器來測試該功能
python <your_name_for_the example>.py
並打電話
curl -i http://localhost:5000/todo/api/v1.0/tasks
雖然我不是最有資格在這里發表評論的人:我認為這可能會對你有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.