@vikholodov

Почему не срабатывает post_save в ассинхронной функции?

Всем привет!
Есть функция с декоратором @asyncio.coroutine, в ней создается объект модели Message, запись сохраняется в бд, но сигнала post_save, также как и pre_save будто нет, по крайней мере, отловить его не получается. При добавления объекта через shell или админку такой проблемы нет, все работает.
Что нужно сделать, чтобы можно было отловить сигнал в данном случае?
@asyncio.coroutine
def new_messages_handler(stream):
	"""
	Saves a new chat message to db and distributes msg to connected users
	"""
	# TODO: handle no user found exception
	while True:
		packet = yield from stream.get()
		session_id = packet.get('session_key')
		msg = packet.get('message')
		username_opponent = packet.get('username')
		if session_id and msg and username_opponent:
			user_owner = get_user_from_session(session_id)
			if user_owner:
				user_opponent = get_user_model().objects.get(username=username_opponent)
				dialog = get_dialogs_with_user(user_owner, user_opponent, packet.get('id'))
				if len(dialog) > 0:
					# Save the message
					
					msg = models.Message.objects.create(
						dialog=dialog[0],
						sender=user_owner,
						text=packet['message'],
						is_system=False,
						read=False
					)
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
вы сделали интересную попытку :) я о таком даже и догадываться не мог - смешать django и asyncio
если хотите работать их смешать, то думаю выход только один - работать через Celery
или же разбить логику так, чтобы не нужно было передавать задачи
Ответ написан
Комментировать
@vikholodov Автор вопроса
Сделал через celery
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Django спроектирован синхронным и однопоточным, его самого нельзя нормально распараллелить и толком нельзя использовать асинхронный код в его воркерах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы