【问题标题】:Running Python in Flask with a constant background task在 Flask 中以恒定的后台任务运行 Python
【发布时间】:2018-10-15 07:10:06
【问题描述】:

我一直在笔记本电脑上运行 Python3.6 脚本,现在我想将它部署到 GCP App Engine。我已经使用他们的教程和其他人将脚本转换为 WSGI。但是,我无法让后台任务持续运行,也无法使用路由查看输出。

这是简单的示例。使用它我可以看到 /route 输出消息 Hello World!

from flask import Flask 
app = Flask(__name__)    

@app.route('/')  
def main():
    """Say hello"""
    return 'Hello, world!'

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

如果我添加一个 while 循环,循环会起作用,但路由不再起作用。这是有道理的,我只是不知道将 while 语句作为后台任务运行的语法。我看过 CRON 示例,但这是不断运行的东西——不是每 X 分钟一次。

    from flask import Flask 
    app = Flask(__name__)    

    @app.route('/') 

    counter = 0
    while True:
      counter += counter
      print(counter)

    def main():
        """Say hello"""
        return 'Hello, world! ' + str(counter)

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

更新:我应该使用 Flask-APScheduler 用于这个?:https://github.com/viniciuschiele/flask-apscheduler

【问题讨论】:

    标签: python python-3.x google-app-engine flask wsgi


    【解决方案1】:

    解决此问题的一种方法是创建两条路由 - 一条启动计数器并返回计数本身。请注意,我添加了“threaded=True”以允许进行多次调用。

    from flask import Flask 
    app = Flask(__name__)    
    
    @app.route('/')  
    def main():
        """Say hello"""
        global index_counter
        print(index_counter)
        return "Hello World: %s" % str(index_counter)
    
    @app.route('/counter')
    def counter():
        global index_counter
        index_counter = 0
        while True:
          index_counter += 1
    
    if __name__ == '__main__': 
        app.run(threaded=True)
    

    现在,您可以先调用:

    http://localhost/counter

    这将启动计数器。

    然后您可以随时调用: http://localhost

    并且应该打印出计数器值。

    【讨论】:

    • 感谢您的建议。这不需要我一直打开浏览器到localhost/counter 吗?即,关闭浏览器窗口会终止任务
    • 您可以使用 curl 调用 localhost/counter - 这样它就可以在 shell 中运行。所以像“curl localhost/counter”
    • @SalArora 我正在尝试每 24 小时更新一次 MySQL 数据库,是否也可以使用此计数器?在更新时,我不希望它以任何方式影响我的网络应用程序。
    • 为此,一个想法是让一个 cronjob 每 24 小时向您的 Flask 应用程序发送一个 curl 请求到更新 MySQL 数据库的端点?这样您就不必在 Flask 应用程序中运行任何线程 - 只需一个端点,您可以每天从 cron 作业调用一次......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2015-05-05
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多