与Flask同时循环运行

2024-05-18 18:37:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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是不是太过分了?有没有比芹菜更简单的库来运行后台程序?

编辑

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


Tags: 项目fromimportfalseapp应用程序flaskled
2条回答

使用多进程在烧瓶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,多处理代码来自我。
注意“use_reloader=False”部分。这是避免循环运行两次所必需的。原因见here

通过使用

python <your_name_for_the example>.py

打电话来

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

虽然我不是最有资格在此发表评论的人:但我认为这可能会对你有所帮助。

How to run recurring task in the Python Flask framework?

相关问题 更多 >

    热门问题