Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与django应用程序和后端服务器一起使用芹菜_Python_Django_Celery - Fatal编程技术网

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

Python 与django应用程序和后端服务器一起使用芹菜,python,django,celery,Python,Django,Celery,我有一个后续/澄清问题与 我有2台服务器(目前)。1服务器运行django web应用程序。另一台服务器运行纯python脚本,这些脚本是web应用程序的CRON计划数据采集和处理作业 有一个用例,web应用程序中的用户活动(更新特定字段)应该触发后端服务器的一系列操作。我可以坚持使用CRON,但随着我们的规模扩大,我可以想象会遇到麻烦。芹菜似乎是一个很好的解决方案,但我不清楚如何实施它。(是的,我读过《入门指南》) 我希望web应用程序将任务发送到特定队列,但后端服务器实际执行工作 假设两台服

我有一个后续/澄清问题与

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

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

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

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

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


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

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

在django服务器上,我没有使用
django芹菜
。我安装了
芹菜
redis
(通过pip),并遵循了

  • 更新了
    proj/proj/settings.py
    文件,其中包含了 芹菜的配置,如
    BROKER\u URL
  • 创建了
    proj/proj/芹菜.py
    文件,但未定义任务 在底部
  • 更新了
    proj/proj/_init__.py
    文件,如文档所示
  • 因为运行django的服务器实际上不会执行任何 芹菜任务,在会触发任务的视图中,我添加了 以下:
从proj.芹菜导入应用程序作为芹菜应用程序

试试看:
#将其发送到芹菜进行后端处理
芹菜app.send_task('tasks.mytask',kwargs={'some_id':obj.id,'other_att':obj.att},queue='my-queue')
除异常作为错误外:
打印('Issue sending task to Cellery')
打印错误

另一台服务器安装了以下组件:
celery
redis
(我在测试中使用了AWS Elasticache redis实例)。 此服务器具有以下文件:

  • celeryconfig.py
    将删除所有芹菜配置和队列 已定义,指向与django服务器相同的
    BROKER\u URL
  • tasks.py
    与我所有任务的实际代码
然后,使用标准命令在此服务器上启动芹菜工人:
芹菜-A任务工人-Q my-queue1,my-queue2

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


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

您可以使用主管来控制芹菜和其他过程