2

我意识到还有许多其他与自定义 django 信号相关的问题不起作用,相信我,我已经阅读了所有这些问题,但没有运气让我的个人情况正常工作。

这是交易:我正在使用 django-rq 来管理由特定 http 请求触发的冗长后台进程。当该后台进程完成后,我希望它触发一个自定义 Django 信号,以便可以检查 django-rq 是否存在任何作业失败/异常。

INSTALLED_APPS 列表中的两个应用程序处于同一级别。app1里面有一个文件: signals.py

import django.dispatch

file_added = django.dispatch.Signal(providing_args=["issueKey", "file"])
fm_job_done = django.dispatch.Signal(providing_args=["jobId"])

还有一个文件jobs.py

from app1 import signals
from django.conf import settings

jobId = 23
issueKey = "fake"
fileObj = "alsoFake"

try:
    pass
finally:
    signals.file_added.send(sender=settings.SIGNAL_SENDER,issueKey=issueKey,fileName=fileObj)
    signals.fm_job_done.send(sender=settings.SIGNAL_SENDER,jobId=jobId)

然后在 app2 内部,在views.py中

from app1.signals import file_added, fm_job_done
from django.conf import settings

#Setup signal handlers
def fm_job_done_callback(sender, **kwargs):
    print "hellooooooooooooooooooooooooooooooooooo"
    logging.info("file manager job done signal fired")

def file_added_callback(sender, **kwargs):
    print "hellooooooooooooooooooooooooooooooooooo"
    logging.info("file added signal fired")

file_added.connect(file_added_callback,sender=settings.SIGNAL_SENDER,weak=False)
fm_job_done.connect(fm_job_done_callback,sender=settings.SIGNAL_SENDER,weak=False)

我没有得到任何反馈,我完全不知所措。我确实知道jobs.py正在执行,因此应该触发信号的代码块也正在执行,因为它位于finally块中(不,try实际上不是空的-我只是把pass放在那里为简单起见)请随时询问更多信息 - 我会尽快回复。

4

2 回答 2

0

这是 django > 2.0 的解决方案

  1. 设置.py:

将 INSTALLED_APPS 的名称从“app2”更改为“app2.apps.App2Config”

  1. app2 -> 应用程序.py:

从 app1.signals 导入文件_添加,fm_job_done

Class App2Config(AppConfig):
    name = 'app2'

    def ready(self):
        from .views import fm_job_done_callback, file_added_callback
        file_added.connect(file_added_callback)
        fm_job_done.connect(fm_job_done_callback)
于 2019-01-24T12:31:08.597 回答
-1

使用 djangoreceiver装饰器

from django.dispatch import receiver
from app1.signals import file_added, fm_job_done

@receiver(fm_job_done)
def fm_job_done_callback(sender, **kwargs):
    print "helloooooooooooooo"


@receiver(file_added)
def file_added_callback(sender, **kwargs):
    print "helloooooooooooooo"

另外,我更喜欢在models.py

于 2015-01-27T00:27:50.400 回答