我意识到还有很多其他问题与自定义Django信号有关,并且相信我,我已经多次阅读了所有这些信息,但没有运气让我的个人情况发挥作用。自定义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为简单起见)请随时索取更多信息 - 我会尽快回复。
信号,你有没有找到一个解决方案?这肯定是django-rq的一个问题,因为信号接收器可以正常工作,使用'async = False' – SColvin 2015-04-03 11:47:47
@SColvin您好。不,我恐怕从来没有真的找到解决办法。下面的答案当然不能解决我的问题。此后,我开始转向另一种更加依赖django-rq和http请求的范例。 – pooley1994 2015-04-04 16:36:08