Python: Запуск кода после возврата чего-либо

Это ApiView из моего проекта django:

class Receive_Payment(APIView):
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAdminUser,)
    def get(self, request, cc_number):
        if Card.objects.filter(cc_num = cc_number).exists():
            client = Client.objects.get(client_id = (Card.objects.get(cc_num = cc_number).client))
            if not client.is_busy:
                client.is_busy = True
                client.save()
                resp = "successful"
            else:
                resp = "client_is_busy"
        else:
            resp = "fail"
        return Response({"response": resp})

Как видите, если client.is_busy не True, я делаю его True здесь. Но в данной ситуации мне нужно client.is_busy = False через 30 секунд. Если я делаю это в коде client.save(), то это задерживает ответ. Как я могу это сделать?

Вместо использования булева значения для определения того, занят ли клиент, используйте время даты, и если оно было установлено менее 30 секунд назад, то клиент занят. Это означает, что вам не нужно запускать никакой код после запроса

from django.db import models
from django.utils.timezone import now
from datetime import timedelta


class Client(models.Model):
    last_updated = models.DateTimeField()

    @property
    def is_busy(self):
        # Can add a property to maintain the same is_busy boolean attribute
        return (now() - self.last_updated) < timedelta(seconds=30)

    def set_busy(self):
        self.last_updated = now()
        self.save()

Вам следует рассмотреть возможность использования здесь объектов таймера.

e.g.

import threading
def free_up_client(client):
   client.is_busy = false

timer = Theading.timer(30.0, free_up_client, [client])
Вернуться на верх