Добрый день, подскажите пожалуйста, почему если, я запускаю ф-цию в который по ws отпправляет не как таску celery,
то все робит, если так
@shared_task
def test_update():
status = Status_Cheq.objects.get(code='pay')
Cheq.objects.filter(id=4059237).update(status=status)
send_cheq_websocket(cheq='4059237', method="update")
def test(request):
test_update.delay()
return JsonResponse({'status':'ok'})
то уже не долетает, я так понимаю что-то с контекстом в celery
consumer.py
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_group_name = 'cheq'
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name)
self.accept()
self.send(text_data=simplejson.dumps({
'type': 'connections_established',
'message': 'Соединение уставновлено'
}))
def receive(self, text_data):
text_data_json = simplejson.loads(text_data)
message = text_data_json['message']
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message,
}
)
def chat_message(self, event):
message = event['message']
method = event['method']
self.send(text_data=simplejson.dumps({
'type': 'chat',
'message': message,
'method': method,
}))
asgi.py
application = ProtocolTypeRouter({
'http': get_asgi_application(),
'websocket': AuthMiddlewareStack(
URLRouter(
cheque.routing.websocket_urlpatterns
)
)
})
def send_message_to_group(group_name, message, method):
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
group_name,
{
'message': message,
'method' : method,
'type': 'chat_message'
}
)
def send_cheq_websocket(cheq, method):
"""
отправить чек по websocket
status: ['add', 'update']
"""
.......
какой-то код
.......
group_name = 'cheq'
send_message_to_group(group_name, message, method)