我意識到還有很多其他問題與自定義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