4

我有一个 Flask 网络应用程序,它显示来自 rss 提要的信息。我想定期处理 rss 提要,例如每 30 分钟一次。提取一些信息并将其存储在 sqlite 数据库中。

但我不知道如何将功能安排到特定的时间间隔。

我使用了 APScheduler,我的代码如下:

def main():
    # Start the scheduler
    filename = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'tmp')) + '\\' + 'spider.log'
    logging.basicConfig(filename=filename, level=logging.DEBUG,format='%(levelname)s[%(asctime)s]: %(message)s')
    sched = Scheduler()
    sched.start()
    sched.add_interval_job(run_job, minutes=30)
    time.sleep(9999)

我有一个run.py函数

from app import app, spider

spider.main()
app.run(debug=True)

app.run(debug=True)启动 Flask Web 应用程序。问题是代码永远不会到达app.run.

那么是否可以产生另一个进程来处理spider.main()调用,并在后台运行该进程?还是我应该使用另一种方法?

注意:我知道我可以使用 Flask-Celery,但是对于这个小应用程序来说,这似乎太重量级了......

4

1 回答 1

4

你不需要time.sleep- 当你运行spider.main它时,它会启动你的调度程序,然后让进程休眠 9999 秒 - 之后它将运行下一行。因此app.run将在开始后约 2.78 小时spider.main开始。

所以spider应该是这样的:

def main():
    # Start the scheduler
    filename = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'tmp')) + '\\' + 'spider.log'
    logging.basicConfig(filename=filename, level=logging.DEBUG,format='%(levelname)s[%(asctime)s]: %(message)s')
    sched = Scheduler()
    sched.start()
    sched.add_interval_job(run_job, minutes=30)
于 2012-07-10T01:51:36.973 回答