Django Channels не работает внутри обработчика заданий или крючков DjangoQ
Я пытаюсь вызвать сообщение по вебсокету, когда задание DjangoQ завершается, но это не работает. Тот же код работает внутри views.py
APIView, который ставит задание в очередь, но не работает внутри моего jobs.py
обработчика. Он не генерирует ошибку. Он ничего не делает.
views.py
# работает (вызывает обработчик потребителя, событие websocket эмитируется и регистрируется в консоли браузера)
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
def event_trigger():
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
'event_sync',
{
'type': 'send_message_to_frontend',
'message': "event_trigered_from_views"
}
)
Тот же код, вызванный из hooks.py
, не работает. Ничего не делает.
hooks.py
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
def event_trigger():
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
'event_sync',
{
'type': 'send_message_to_frontend',
'message': "event_trigered_from_hooks"
}
)
def import_wallet_completed(task):
ic(task.result)
event_trigger()
Invite.objects.update_or_create(
emoji_key=task.result['emoji_key'],
defaults={
'job_status': 'wallet_imported'
}
)
Что может происходить?