我如何利用Flask为python应用程序构建GUI - (如何在Flask中运行后台任务?)

时间:2017-11-07 07:04:25

标签: python web flask server

我写了一个简单的应用程序,可以在线获取股票报价,并发布买入/卖出订单。现在这一切都是通过控制台完成的。我阅读并阅读了有关Flask网络应用程序的几个教程。但我无法在获取同时显示在Flask应用程序上的信息时弄清楚如何运行服务器。

目标是获取我的监视列表的引号,并将其显示在我的index.html(localhost)

这是我试图无效的:

  1. 在一个线程中运行我的循环请求,另一个线程运行服务器。 - 服务器无法启动!

  2. 运行嵌套在main()中的app.run()。

  3. 请指出我正确的学习方向。

    app = Flask(__name__)
    
    
    @app.route('/')
    def index(watchlist=None):
        return render_template("index.html", watchlist=watchlist)
    
    
    app.run()
    
    #################主要代码的大部分功能被删除以便易读
    def main():
    qt = Questrade.Questrade()
    qt.update_all()
    watchlist = Watchlist.Watchlist(qt.quotes)
    
    loop_count = 0
    while 1:
        print("loop start")
        qt.update_all()
        watchlist.update_stocks(qt.quotes)
        loop_count += 1
        print("loop end")
        print(loop_count)
        time.sleep(10)
    

1 个答案:

答案 0 :(得分:2)

如果您想运行后台任务,请考虑使用celery或apscheduler。

关于如何使用芹菜在任务中执行后台任务的答案。

CONF

请配置像this

这样的芹菜
celery.conf.beat_schedule = {
    'watch-every-10-seconds': {
        'task': 'tasks.watchstock',
        'schedule': 10.0,
        'args': (16, 16)
    },
}

celery beat --app myproject

运行芹菜

视图

from flask import Flask

flask_app = Flask(__name__)
flask_app.config.update(
    CELERY_BROKER_URL='redis://localhost:6379',
    CELERY_RESULT_BACKEND='redis://localhost:6379'
)
celery = make_celery(flask_app)


@celery.task()
def watchstock():
    --- your function code ---

创建可在循环中执行的任务函数,以便为您获取库存,然后将其保存到数据库中。