使用常量后台任务在Flask中运行Python

时间:2018-05-04 18:17:11

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

我一直在我的笔记本电脑上运行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

1 个答案:

答案 0 :(得分:2)

解决这个问题的一种方法是创建两个路由 - 一个启动计数器,然后返回计数本身。请注意,我已添加" 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

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