这可能是一个蹩脚的问题,但我真的很困惑这两个问题。我知道signals
用于在发生事情时执行某项任务。但芹菜怎么样?在文档中说:
Celery是基于分布式消息传递的异步任务队列/作业队列。
有人请告诉我芹菜是什么吗?这两者之间有什么区别以及何时使用它们?将不胜感激!谢谢。
答案 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()
致电:
信号在python解释器的同一个实例上工作(换句话说,在你的操作系统的同一个进程中)。
Celery提供异步任务。这些任务可以像django信号一样工作(例如celery_task(arg1 =“Hello”))。但常见的情况是异步调用:
celery_task.delay(arg1="Hello")
这不是一个简单的函数调用。该函数将在其他python进程(celery worker)中执行。在这个电话之后你可以决定:你想等待这个功能的结果吗?或者你继续使用你的代码?或者你想要一些棘手的东西?
Celery非常方便,以防你想要做一些背景或计划任务,如调整图像大小,解码视频,更新Facebook状态等。