当前位置: 首页 > 面试题库 >

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

公冶子安
2023-03-14
问题内容

我正在使用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,这似乎可以解决问题,但对于我的问题有多简单,似乎也有些过头了。

使用Flask overkill只是为了让UI管理我的python后端代码吗?是否有比Celery更简单的库可用于在后台运行某些内容?


问题答案:

使用多进程在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


 类似资料:
  • 我创建了一个dash应用程序来显示另一个代码正在收集的信息,我希望使用Python中的asyncio模块同时运行这两个应用程序。 我的代码使用异步函数,Dash应用程序(基于Flask)在服务时阻止其他任何东西执行。 我不确定这是否需要打开更多的线程。 这是我当前的代码,它只运行主协程。 如何同时运行main和_dashboard?

  • 我试图在修改给定模板后运行Corda应用程序。在运行节点之后,我尝试运行一个模板服务器。以下是详细信息 Corda版本:4.0 在端口8161上运行的ActiveMQ 在运行上述任务后,我得到以下异常。我看了笔记,把Corda升级到v4。0,但仍然无法运行服务器。 我尝试过: > 在一个github问题中指定将corda升级到v4.0 添加jolokia作为jvm代理 什么都没用。谁能帮忙吗?

  • 问题内容: 我正在尝试围绕我的烧瓶应用程序为办公室中的菜鸟创建一个简单的tkinter GUI窗口。我希望脚本按以下顺序执行这些任务: 启动Flask Web服务器 用一个按钮打开一个tkinter GUI窗口。当按下时,该按钮将打开应用程序的索引页面(例如http://127.0.0.1:5000) 关闭tkinter gui窗口时终止flask Web服务器 到目前为止,这是我所拥有的,但是该

  • 问题内容: 我有一个带有表“ Staff”的数据库(SQL),其中有两个记录。我需要使用PHP在网页上显示这些记录的内容。 我将如何正确更改while循环,以便它将在页面上显示两个记录。 谢谢! 问题答案: 仅从数据库中检索一行。您需要在循环中调用它以检索所有行。该增量是不必要在这里,因为返回false时,没有更多行可供选择。

  • 问题内容: 我正在抓取一些似乎对其提供很好保护的网站。我可以使它正常工作的唯一方法是使用Selenium加载页面,然后从中抓取内容。 目前,这在我的本地计算机上有效(当我访问页面时,Firefox窗口打开和关闭,并且在脚本中对其HTML进行了进一步处理)。但是,我需要在网上可以访问我的刮板。刮板嵌入在Heroku上的Flask应用程序中。有没有办法让Selenium浏览器在Heroku服务器上工作

  • 我正在使用Flask开发一个网站,在开发过程中,我使用以下文件运行flask: 当我启动服务器时,或由于文件已更新而自动重新启动时,它始终显示打印行两次: 虽然这并不是一个真正的问题(其余部分如预期那样工作),但我只是想知道为什么它会这样?有什么想法吗?