我对此并不陌生,所以如果我要问的是完全愚蠢的事情,请多包涵。
我正在开发一个基本的Web应用程序,并使用Heroku + flask + python。
对于后台任务,Heroku建议使用工作程序。我想知道是否可以为这些后台任务创建新线程?还是有一个原因使worker + redis是更好的解决方案?
这些后台任务实际上并不关键。
最佳答案
在单独的工作人员中执行此操作的主要好处是,您可以将应用程序与后台任务完全脱钩,因此,如果一个中断,则不会影响另一个。就是说,如果您对此不关心,或者出于任何原因而需要将后台任务与应用程序紧密耦合,则可以使用APScheduler使后台任务作为单独的线程运行,而无需增加其他工作人员。一个每10秒运行一次后台作业的简单示例如下:
from apscheduler.schedulers.background import BackgroundScheduler
def some_job():
print "successfully finished job!"
apsched = BackgroundScheduler()
apsched.start()
apsched.add_job(my_job, 'interval', seconds=10)
如果您希望任务异步运行而不是按计划运行,则可以使用RQ,该示例在其主页上有很好的示例。 RQ由Redis支持,但是您可以在单独的工作进程中运行它,尽管您愿意的话也可以。