gpt4 book ai didi

python - 将 celery 与 django 应用程序和后端服务器一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:52 24 4
gpt4 key购买 nike

我有一个与 older question 相关的后续/澄清问题

我有 2 台服务器(目前)。 1 台服务器运行 django Web 应用程序。另一台服务器运行纯 python 脚本,这些脚本是为 Web 应用程序安排的 CRON 数据采集和处理作业。

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

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

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

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

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

最佳答案

我决定尝试一下并解决出现的任何问题。

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

  • 更新了 proj/proj/settings.py 文件以包含最少的内容Celery 的配置,例如 BROKER_URL
  • 创建了 proj/proj/celery.py 文件,但未定义任务在底部
  • 按照记录更新了 proj/proj/__init__.py 文件
  • 因为运行 django 的服务器实际上不会执行任何Celery任务,在 View 中会触发任务,我添加了以下:

从 proj.celery 将应用程序导入为 celery_app

尝试:
# 发送到celery进行后端处理
celery_app.send_task('tasks.mytask', kwargs={'some_id':obj.id,'another_att':obj.att},queue='my-queue')
除了异常错误:
print('向 Celery 发送任务')
打印错误

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

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

然后使用标准命令在此服务器上启动 celery 工作人员:celery -Atasksworker -Q my-queue1,my-queue2

对于测试,上述方法有效。现在我只需要让 celery 在后台运行并优化 worker /队列的数量。

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

关于python - 将 celery 与 django 应用程序和后端服务器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24704913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com