python - 配置 Django/Celery 将任务发送到不同的代理
问题描述
该系统正在运行一个 Django 服务器 (1.11.5),其中 Celery (4.0.0) 和 RabbitMQ 作为代理。
有必要将一些任务发送到远程服务器以在那里进行处理。这个新服务器将安装自己的 RabbitMQ 以将其用作代理。问题出现在运行 Django 的服务器上,我们需要选择哪些任务继续在本地机器上运行,哪些任务被发送到新服务器。
由于某些架构原因,无法使用队列解决此问题,因此必须将任务发送到新代理。
是否可以在 Django 中创建两个不同的 Celery 应用程序(每个都指向不同的代理),每个应用程序都有自己的任务?怎么做到呢?
解决方案
您可以创建两个 celery 应用并将 celery.py 重命名为 celery_app.py 以避免自动导入。
from celery import Celery
app1 = Celery('hello', broker='amqp://guest@localhost//')
@app1.task
def hello1():
return 'hello world from local'
和
from celery import Celery
app2 = Celery('hello', broker='amqp://guest@remote//')
@app2.task
def hello2():
return 'hello world from remote'
对于共享任务:
from celery import shared_task
@shared_task
def add(x, y):
return x + y
当您运行 celery 工作节点时:
celery --app=PACKAGE.celery_app:app worker
推荐阅读
- vb.net - VB.net // 你如何将一个数字向下取整?
- angularjs - 如何在 PWA 的审计中修复“当 JavaScript 不可用时不提供后备内容”?
- c# - Asp.net 重定向到另一个站点
- function - 如何在 Azure PowerShell 函数中导入模块?
- php - 在 Laravel 的搜索表单中定义过滤器最低到最高价格的问题
- react-native - 不想选择日期 react-native-calendars 议程
- python - 如何为树莓派编译/混淆 .kv (kivy) 文件
- apache-spark - 即使丢失,来自输入事件的 Trigg Oozie 工作流
- python - Python `time.sleep` 随机崩溃,没有消息
- tensorflow - 损失策略梯度 - 强化学习