Я понимаю, что есть много других вопросов, связанных с пользовательскими сигналами 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 (ни одна попытка не пуста - я просто помещаю проход туда для простоты) Пожалуйста, не стесняйтесь спрашивать дополнительную информацию - я отвечу как можно скорее.
с той же проблемой, вы когда-нибудь найти решение для этого? Это определенно проблема с django-rq, поскольку приемник сигнала отлично работает с 'async = False' – SColvin
@SColvin Привет. Нет, боюсь, я никогда не нашел решения. Следующий ответ, конечно, не помог решить мою проблему. С тех пор я перешел к другой парадигме, полагающейся в большей степени на django-rq и http-запросы. – pooley1994