这可能是一个蹩脚的问题,但我真的很困惑这两个.我知道signals
当事情发生时我习惯做一些任务.但芹菜怎么样?在文档中它说:
Celery是基于分布式消息传递的异步任务队列/作业队列.
有人请告诉我芹菜是什么吗?这两者之间有什么区别以及何时使用它们?将不胜感激!谢谢.
所有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)中执行.在这个电话之后你可以决定:你想等待这个功能的结果吗?或者你继续使用你的代码?或者你想要一些棘手的东西?
芹菜非常方便,以防你想做一些背景或计划任务,如调整大小图像,解码视频,更新Facebook状态等.