2015-01-27 31 views
1

我意識到還有很多其他問題與自定義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爲簡單起見)請隨時索取更多信息 - 我會盡快回復。

+0

信號,你有沒有找到一個解決方案?這肯定是django-rq的一個問題,因爲信號接收器可以正常工作,使用'async = False' – SColvin 2015-04-03 11:47:47

+0

@SColvin您好。不,我恐怕從來沒有真的找到解決辦法。下面的答案當然不能解決我的問題。此後,我開始轉向另一種更加依賴django-rq和http請求的範例。 – pooley1994 2015-04-04 16:36:08

回答

0

使用Django receiver裝飾

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

+0

您可以通過「在models.py中處理信號」來擴展您的意思嗎? – pooley1994 2015-01-27 17:44:05

+0

@ pooley1994在models.py中定義信號回調。 – levi 2015-01-27 17:47:05

+0

好的。那麼只是使用裝飾器而不是原來的方法並沒有改變任何可悲的事情。 – pooley1994 2015-01-27 18:03:33