celery+redis异步处理时,tasks.py里self参数设置的说明

self 的任务写法 (bind=True)

这种写法允许任务访问到任务实例本身的属性和方法,通常用于需要在任务执行过程中更新任务状态或访问任务元数据(如任务ID)的场景。

from celery import shared_task

@shared_task(bind=True)
def perform_lstm_task(self, algorithm_id):
    # 这里的 self 是任务实例,可以访问任务的状态、任务ID等属性
    task_id = self.request.id
    
    # 可以手动更新任务状态
    self.update_state(state='PROGRESS', meta={'progress': 50})
    
    # 执行实际的 LSTM 任务逻辑
    result = perform_lstm_algorithm(algorithm_id)
    
    # 返回结果
    return result

def perform_lstm_algorithm(algorithm_id):
    # 实际的 LSTM 计算逻辑
    return {"status": "completed"}

特点:

  • self 代表任务实例,可以通过 self.request 访问任务元数据,例如任务ID。
  • 可以使用 self.update_state 手动更新任务的状态和元数据。
  • 适合在任务过程中需要反馈进度或访问任务状态的场景。

不带 self 的任务写法 (bind=False,默认行为)

这种写法更简单,适合不需要访问任务实例属性,只需执行某项具体任务的场景。

from celery import shared_task

@shared_task
def perform_lstm_task(algorithm_id):
    # 执行实际的 LSTM 任务逻辑
    result = perform_lstm_algorithm(algorithm_id)
    
    # 返回结果
    return result

def perform_lstm_algorithm(algorithm_id):
    # 实际的 LSTM 计算逻辑
    return {"status": "completed"}
 

特点:

  • 函数没有 self 参数,因此无法访问任务实例的状态或元数据。
  • 适合不需要反馈进度或手动更新状态的简单任务。
  • 更简洁,但功能上没有 bind=True 的写法灵活。

总结

  • self 的写法 (bind=True):适用于需要在任务执行过程中不断更新状态、报告进度、或者访问任务ID等元数据的场景。
  • 不带 self 的写法 (bind=False):适用于简单的任务,只需要执行逻辑,不需要与任务元数据交互。

选择哪种写法取决于任务的复杂性和需求。如果需要更复杂的控制和反馈机制,建议使用 bind=True 的写法。如果只是执行一个简单的任务,那么默认的 bind=False 会更合适。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值