Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ########################################################################
- # Где-то в коде проекта происходит
- # Изменение статуса размещения гида на сайте
- ########################################################################
- with transaction.atomic():
- ...
- guide = Guide.objects.select_for_update().get(pk=XXX)
- guide.placement_status = GuidePlacementStatus.STOPED
- guide.save(update_fields=['placement_status'])
- ...
- ########################################################################
- # По django-сигналу изменения объекта гида происходит
- # обновление видимости всех его экскурсий (экспириенсов)
- ########################################################################
- @receiver(post_save, sender=Guide)
- def update_experience_visibility_after_guide_placement_status_change(sender, instance: Guide, created, **kwargs):
- """Обновление видимости экспириенсов гида после смены статуса его размещения"""
- guide = instance
- if guide.is_changed('placement_status'):
- for exp_id in guide.experiences_created.values_list('pk', flat=True):
- update_guide_exp_visibility(exp_id)
- ########################################################################
- # Проблема:
- # синхронный вызов тяжёлой задачи `update_guide_exp_visibility`
- # блокирует интерфейс и обламывает пользователя задержкой
- # Как решить эту проблему?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement