django - 信号与芹菜的区别

时间:2013-11-29 17:43:48

标签: celery django-celery django-signals

这可能是一个蹩脚的问题,但我真的很困惑这两个问题。我知道signals用于在发生事情时执行某项任务。但芹菜怎么样?在文档中说:

  

Celery是基于分布式消息传递的异步任务队列/作业队列。

有人请告诉我芹菜是什么吗?这两者之间有什么区别以及何时使用它们?将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:14)

所有django信号的拳头是同步的。例如,如果您有一个处理SomeModel的before_save操作的信号。你有...说...查看这样的功能:

def some_view(requrest):
    # do some staff
    SomeModel(some_field="Hello").save()
    # do other stuff

代码的时间线如下:

  • 做一些事情
  • SomeModel(some_field="Hello").save()致电:
    • 做一些django的东西
    • 在实际保存之前执行信号before_save处理程序
    • 实际保存到DB
  • 做其他事情

信号在python解释器的同一个实例上工作(换句话说,在你的操作系统的同一个进程中)。

Celery提供异步任务。这些任务可以像django信号一样工作(例如celery_task(arg1 =“Hello”))。但常见的情况是异步调用:

celery_task.delay(arg1="Hello") 

这不是一个简单的函数调用。该函数将在其他python进程(celery worker)中执行。在这个电话之后你可以决定:你想等待这个功能的结果吗?或者你继续使用你的代码?或者你想要一些棘手的东西?

Celery非常方便,以防你想要做一些背景或计划任务,如调整图像大小,解码视频,更新Facebook状态等。