使用celery时要注意的任务调用形式

本文探讨了Django与Celery的集成方式及其在微服务架构中的应用挑战。作者通过实际经验分享了如何将Celery从Django项目中独立出来,并讨论了在Kubernetes环境中部署Celery Worker的最佳实践。

因为之前,一直用django和celery紧密集成,不分家。

所以使用时参考了网上的配置之后,没有变更过。

最近,和洪军想用k8s的pod重新规划系统构架时,这个问题才又浮了出来。

只是我们的task和framework集成太深,celery worker确实不容易拆出来,

但原则还是要知道的。

今天看书,代码及注释中说明了,如果client要调用worker上的task,

只需要传递模块内的任务名称,及相关参数即可!!!

而django和celery合作时,是相互缠绕在一起的,无法明辩。

转载于:https://www.cnblogs.com/aguncn/p/7741835.html

### 如何在初始化 Celery 指定任务基类 在使用 Celery 进行分布式任务处理,可以通过自定义任务基类来扩展默认的任务行为。通过继承 `celery.Task` 类并重写其方法,可以实现特定的需求,比如日志记录、错误处理或其他功能[^1]。 以下是配置示例: #### 自定义任务基类 首先创建一个自定义的任务基类,该基类可以从 `celery.Task` 继承,并覆盖所需的方法(如 `on_success`, `on_failure` 等)。下面是一个简单的例子: ```python from celery import Task class MyBaseTask(Task): def on_success(self, retval, task_id, args, kwargs): """当任务成功完成调用""" super().on_success(retval, task_id, args, kwargs) print(f"[Base Class Callback] Task {task_id} succeeded with result: {retval}") # 日志记录或回调逻辑 def on_failure(self, exc, task_id, args, kwargs, einfo): """当任务失败调用""" super().on_failure(exc, task_id, args, kwargs, einfo) print(f"[Base Class Callback] Task {task_id} failed due to exception: {exc}") ``` 此代码片段展示了如何定义一个名为 `MyBaseTask` 的任务基类,在任务成功或失败触发相应的回调函数[^2]。 #### 初始化 Celery 并设置任务基类 接下来,在初始化 Celery 实例,可通过传递参数 `task_cls` 来指定上述自定义的任务基类作为全局默认值。如下所示: ```python from celery import Celery app = Celery('my_app', broker='pyamqp://guest@localhost//', backend='rpc://', task_cls='path.to.MyBaseTask') # 使用自定义任务基类 ``` 这里的关键在于 `task_cls` 参数,它指定了用于实例化所有新任务的对象路径字符串形式表示的位置。 如果希望更灵活地控制哪些任务使用这个新的基类,则可以在单独声明每个具体任务候显式传入 base 参数给 @shared_task 或 app.task 装饰器: ```python @app.task(base=MyBaseTask) def add(x, y): return x + y ``` 这样就完成了对 Celery任务基类的定制与应用过程说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值