使用芹菜与django应用程序和后端服务器

时间:2014-07-11 19:14:38

标签: python django celery

我有一个与older question

相关的后续/澄清问题

我有2台服务器(现在)。 1台服务器运行django Web应用程序。另一台服务器运行纯粹的python脚本,这些脚本是CRON计划的数据采集&处理网络应用的工作。

有一个用例,Web应用程序中的用户活动(更新某个字段)应该触发后端服务器的一系列操作。我可以坚持使用CRON,但随着我们扩大规模,我可以想象遇到麻烦。芹菜似乎是一个很好的解决方案,除了我不清楚如何实现它。 (是的,我确实阅读了入门指南)。

我希望Web应用程序将任务发送到特定队列,但后端服务器实际执行工作。

假设两个服务器都使用相同的代理URL,

我是否需要在Djando中定义存根任务,或者我可以使用celery.send_task方法吗? 我还应该使用django-celery吗?

同时后端服务器将运行Celery并完全执行任务和工作人员?

1 个答案:

答案 0 :(得分:1)

我决定尝试并解决任何问题。

在我的django服务器上,我没有使用django-celery。我安装了celeryredis(通过点子)并按照First Steps with Django中的大部分说明进行了操作:

  • 更新proj/proj/settings.py文件以包含最低限度的文件 Celery的配置,例如BROKER_URL
  • 创建了proj/proj/celery.py文件,但没有定义任务 在底部
  • 更新了已记录的proj/proj/__init__.py文件
  • 由于运行django的服务器实际上并不执行任何操作 Celery任务,在触发任务的视图中,我添加了 以下:

from proj.celery import app as celery_app

try: # send it to celery for backend processing celery_app.send_task('tasks.mytask', kwargs={'some_id':obj.id,'another_att':obj.att}, queue='my-queue') except Exception as err: print('Issue sending task to Celery') print err

另一台服务器安装了以下内容:celeryredis(我使用了一个AWS Elasticache redis实例进行此测试)。 该服务器具有以下文件:

  • celeryconfig.py将是我所有的Celery配置和队列 已定义,指向与django服务器相同的BROKER_URL
  • tasks.py包含我所有任务的实际代码

然后使用标准命令celery -A tasks worker -Q my-queue1,my-queue2

在此服务器上启动芹菜工作者

对于测试,上述工作。现在我只需要在后台运行芹菜并优化工人/队列的数量。

如果有人有其他意见或改进,我很乐意听到他们的声音!