在Flask中运行Python并执行固定的后台任务
我一直在笔记本电脑上运行Python3.6脚本,现在我想将其部署到GCP应用程序引擎。我使用了他们的教程和其他教程将脚本转换为WSGI。但是,我很难让后台任务持续运行,也无法使用路由查看输出 这是一个简单的例子。使用它,我可以看到/route输出消息Hello World在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
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作业调用一次即可。。。