我有一个Flask网络应用,它显示来自RSS Feed的信息。我想定期处理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网络应用。问题是代码永远不会达到app.run
。
那么可以生成另一个进程来处理spider.main()
调用,并在后台运行该进程吗?或者我应该使用其他方法吗?
NB:我知道我可以使用Flask-Celery,但对于这个小应用程序来说,这似乎太重了......
答案 0 :(得分:4)
您不需要time.sleep
- 当您运行spider.main
时,它会启动您的调度程序,然后将进程置于休眠状态9999秒 - 之后它将运行下一行。因此app.run
将在spider.main
开始后的2.78小时开始。
所以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)