Flask应用程序即使在不使用时也会定期调用外部函数

时间:2016-02-10 04:44:43

标签: python time flask

我写的应用程序涉及定期抓取网站并将数据存储在数据库中以查看它是如何随时间变化的。为此,需要每天调用一次抓取功能。

使用time.sleep()调用或任何类似的跟踪时间的方法劫持了Flask应用,并使用户无法更改他们正在查看的页面。

我想出的另一种跟踪刮刮时间的方法需要重新加载页面:

@app.route("/")
def index():
    if (time.time() - last_scrape) > 86400.0:
        scrape()
        last_scrape = time.time()
    return render_template("index.html")

但是,这种方法有两个问题:

  1. 为了定期抓取,应用程序要求有人几乎不断浏览页面。
  2. 当时间结束并且调用了scrape函数时,导航到页面的任何人都必须等待函数调用在页面加载之前完成。
  3. 有没有办法在不影响应用功能的情况下每天可靠地更新抓取的信息?

1 个答案:

答案 0 :(得分:0)

为什么你需要在Flask视图中刮擦?

设置一个单独的进程来执行抓取并将详细信息存储在数据库中。 cron可以轻松触发此脚本,也可以在您的环境中使用任何任务调度程序。

然后在Flask应用中实现一个查询数据库的视图,并根据需要显示已删除的信息。

如果您必须在Flask应用中实施抓取,请将其写为单独的线程。它将花费大部分时间睡眠,并花费少量时间来抓取数据并更新数据库。重要的是,它不会阻止Flask运行的主线程。