捕获从芹菜任务发送的Django信号

时间:2018-11-27 15:04:58

标签: django celery signals

捕获从芹菜任务发送的django信号。可能吗?据我所知,它们正在不同的进程中运行

@celery.task
def my_task():
    ...
    custom_signal.send()

@receiver(custom_signal)
def my_signal_handler():
    ...

1 个答案:

答案 0 :(得分:0)

请记住,您的异步任务必须是@shared_task装饰器。以便从外部调用,因为它不会附加到具体的应用实例。 Documentation @shared_task celery

task.py

@shared_task
def send_email(email):
    # Do logic for sending email or other task

signal.py

正如您在下面看到的那样,这仅在模型Contract的post_save(在用户执行保存后)时执行(在您的情况下,合同将是正在执行的任何其他模型)。

@receiver(post_save, sender=Contract)
def inflation_signal(sender, **kwargs):
    if kwargs['created']:
        send_email.delay('mymail@example.com')