我有一个与older question
相关的后续/澄清问题我有2台服务器(现在)。 1台服务器运行django Web应用程序。另一台服务器运行纯粹的python脚本,这些脚本是CRON计划的数据采集&处理网络应用的工作。
有一个用例,Web应用程序中的用户活动(更新某个字段)应该触发后端服务器的一系列操作。我可以坚持使用CRON,但随着我们扩大规模,我可以想象遇到麻烦。芹菜似乎是一个很好的解决方案,除了我不清楚如何实现它。 (是的,我确实阅读了入门指南)。
我希望Web应用程序将任务发送到特定队列,但后端服务器实际执行工作。
假设两个服务器都使用相同的代理URL,
我是否需要在Djando中定义存根任务,或者我可以使用celery.send_task
方法吗?
我还应该使用django-celery吗?
同时后端服务器将运行Celery并完全执行任务和工作人员?
答案 0 :(得分:1)
我决定尝试并解决任何问题。
在我的django服务器上,我没有使用django-celery
。我安装了celery
和redis
(通过点子)并按照First Steps with Django中的大部分说明进行了操作:
proj/proj/settings.py
文件以包含最低限度的文件
Celery的配置,例如BROKER_URL
proj/proj/celery.py
文件,但没有定义任务
在底部proj/proj/__init__.py
文件 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
另一台服务器安装了以下内容:celery
和redis
(我使用了一个AWS Elasticache redis实例进行此测试)。
该服务器具有以下文件:
celeryconfig.py
将是我所有的Celery配置和队列
已定义,指向与django服务器相同的BROKER_URL
tasks.py
包含我所有任务的实际代码然后使用标准命令celery -A tasks worker -Q my-queue1,my-queue2
对于测试,上述工作。现在我只需要在后台运行芹菜并优化工人/队列的数量。
如果有人有其他意见或改进,我很乐意听到他们的声音!