使用烧瓶路由 (Python) 启动和停止方法



我正在使用Flask和python(ver 3.6)构建一个小实用程序。

此实用程序基本上使用 REST 调用调用外部系统(sys1 和 sys2),并将数据从 sys1 单向同步到 sys2。 此同步过程将持续运行,直到设置终止标志。

我希望能够使用烧瓶路由启动和停止此同步过程/方法。

例如

  • 如果在/start 处收到请求,o
    则启动然后启动此方法。
    o 返回 HTTP 响应代码(响应不应等待方法完成

    )

  • 如果在/stop 处收到请求, o 如果方法正在运行,则通过设置 kill 标志来停止该方法。(同样,来自烧瓶的响应不应等待方法完成)

现在,我浏览了这里和其他网站的许多查询,但它们似乎都满足了特定需求。根据我的理解,我尝试了以下方法(可能不正确地完成此任务:

  1. 尝试从路由创建线程并调用该方法 - 由于某种原因烧瓶等待方法完成而不起作用(是因为烧瓶是单线程且阻塞吗?

  2. 阅读芹菜,但我觉得在这种情况下使用芹菜可能有点矫枉过正。

异步启动此过程的正确方法是什么以及如何启动?线程?asyncio或芹菜是唯一的方法。

这是一个工作示例。当您调用run时,它将启动一个 1 秒的循环,打印"正在运行..."。然后,当您调用stop时,它会修改线程函数检查循环并停止的全局变量。

您应该能够粘贴并继续,然后从那里根据您的目的进行修改。

from flask import Flask, Response
from threading import Thread
from time import sleep
app = Flask(__name__)
stop_run = False

def my_function():
global stop_run
while not stop_run:
sleep(1)
print("running...")

def manual_run():
t = Thread(target=my_function)
t.start()
return "Processing"

@app.route("/stop", methods=['GET'])
def set_stop_run():
global stop_run
stop_run = True
return "Application stopped"

@app.route("/run", methods=['GET'])
def run_process():
global stop_run
stop_run = False
return Response(manual_run(), mimetype="text/html")

if __name__ == "__main__":
app.run()

相关内容

  • 没有找到相关文章

最新更新