簡體   English   中英

與Flask服務器同時運行while循環

[英]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

雖然我不是最有資格在這里發表評論的人:我認為這可能會對你有所幫助。

如何在Python Flask框架中運行重復任務?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM