Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Flask中运行Python并执行固定的后台任务_Python_Python 3.x_Google App Engine_Flask_Wsgi - Fatal编程技术网

在Flask中运行Python并执行固定的后台任务

在Flask中运行Python并执行固定的后台任务,python,python-3.x,google-app-engine,flask,wsgi,Python,Python 3.x,Google App Engine,Flask,Wsgi,我一直在笔记本电脑上运行Python3.6脚本,现在我想将其部署到GCP应用程序引擎。我使用了他们的教程和其他教程将脚本转换为WSGI。但是,我很难让后台任务持续运行,也无法使用路由查看输出 这是一个简单的例子。使用它,我可以看到/route输出消息Hello World from flask import Flask app = Flask(__name__) @app.route('/') def main(): """Say hello""" return

我一直在笔记本电脑上运行Python3.6脚本,现在我想将其部署到GCP应用程序引擎。我使用了他们的教程和其他教程将脚本转换为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() 
更新:我应该使用
如何使用调度程序?:

实现这一点的一种方法是创建两条路由—一条启动计数器,另一条返回计数本身。注意,我添加了“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)
现在,您可以首先调用:

这将启动计数器

然后,您可以在任何时候调用:


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

实现这一点的一种方法是创建两个路由-一个启动计数器,另一个返回计数本身。注意,我添加了“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)
现在,您可以首先调用:

这将启动计数器

然后,您可以在任何时候调用:


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

谢谢您的建议。这难道不需要我一直打开一个浏览器吗?i、 例如,关闭浏览器窗口将终止可以使用curl调用localhost/counter的任务,这样它就可以在shell中运行。所以像“curl localhost/counter”@SalArora这样的东西我正在尝试每24小时更新一次MySQL数据库,使用这个计数器也可以吗?更新时,我不希望它以任何方式影响我的web应用程序。为此,一个想法是让一个cronjob每隔24小时向你的Flask应用程序发送一个curl请求到更新MySQL数据库的端点?这样,你就不必在Flask应用程序中运行任何线程——只需一个端点,你可以每天从cron作业调用一次……谢谢你的建议。这难道不需要我一直打开一个浏览器吗?i、 例如,关闭浏览器窗口将终止可以使用curl调用localhost/counter的任务,这样它就可以在shell中运行。所以像“curl localhost/counter”@SalArora这样的东西我正在尝试每24小时更新一次MySQL数据库,使用这个计数器也可以吗?更新时,我不希望它以任何方式影响我的web应用程序。为此,一个想法是让一个cronjob每隔24小时向你的Flask应用程序发送一个curl请求到更新MySQL数据库的端点?这样,您就不必在Flask应用程序中运行任何线程—只需一个端点,您每天可以从cron作业调用一次即可。。。