gpt4 book ai didi

python-3.x - 使用 flask 路由(Python)启动和停止方法

转载 作者:行者123 更新时间:2023-12-03 23:16:36 33 4
gpt4 key购买 nike

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

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

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

例如,

  • 如果在/start 收到请求,
    o 然后开始然后开始这个方法。
    o 返回一个 HTTP 响应代码(响应不应等待方法完成)
  • 如果在/stop 收到请求,
    o 如果方法正在运行,则通过设置 kill 标志停止该方法。
    (同样,flask 的响应不应等待方法完成)

  • 现在,我浏览了这里和其他网站的许多查询,但它们似乎都满足特定需求。根据我的理解,我尝试了以下事情(可能不恰本地完成了这个任务:
  • 尝试从路由创建一个线程并调用该方法 - 由于某种原因 flask 等待该方法完成而无法工作(是因为 flask 是单线程且阻塞的吗?)
  • 阅读 celery ,但我觉得在这种情况下使用 celery 可能有点矫枉过正。

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

    最佳答案

    这是一个工作示例。当您调用 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()

    关于python-3.x - 使用 flask 路由(Python)启动和停止方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49821707/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com