Django中的任务队列

时间:2012-04-03 07:17:40

标签: django scheduled-tasks

我只听说过像Celery这样的工具,但我不知道它是否符合我的需要,是我能提供的最佳解决方案。

想象一下像Travian这样的游戏。我们开始建设,我们必须等待N秒,直到建设完成。何时以及如何完成施工?


解决方案1:每次加载页面时都要检查是否存在活动构造。如果像这样的查询需要一些时间,我们可以使它们异步。如果有的话 - 然后完成。

但是,通过这种方式,我们一直在等待用户重新加载页面。当然,我们可以使用cronjob来检查要不时完成的构造,但是cronjobs会在一分钟或更短的时间内执行一次。必须尽可能精确地执行构造/攻击等。


上面的解决方案有效,但有一些缺点。什么是更好的 RELIABLE 方式来执行我提到的那些操作。

此外,我们假设资源需要以X per hour的速度重新生成,我们需要非常精确且经常地重新生成它们。如何在不等待页面刷新的情况下实现此目的?


最后,解决方案应该在Webfaction托管或任何其他共享托管中工作。我听说Celery在Webfaction中不起作用,或者我错了?

1 个答案:

答案 0 :(得分:0)

是的,芹菜有几秒钟的定期任务: http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html 您还可以使用celery的crontab及时运行任务 http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#crontab-schedules

此外,如果您需要检查资源数量,我认为这是每个请求的常见部分,因此您的响应应该是

{
   "header": {"resources": {"wood":1, "stone":500}}
   "data": {.. you real data shoud be here...}
}

您需要在响应中添加标题,其中包含资源计数,未读消息等常用信息,并在客户端上正确处理。

要改进它,你可以使用nginx + ssl + memcache后端。