如何使用计时器调用函数?



如何使用计时器调用函数?

models.py

# Choices
time = [
('1', 'Morning'),
('2', 'Afternoon'),
('3', 'Evening'),
('4', 'Night'),
]
# Model
class Calendar(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL,on_delete=models.SET_NULL)
date = models.DateField()
time = models.CharField(max_length=10, choices=time)
location = models.CharField(max_length=32)
conformation = models.BooleanField(default=False)

views.py

class CheckAvailability(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
date = request.data.get('date')
time = request.data.get('time')
location = request.data.get('location')
user = request.user
if date and time and location:
exists, created = Calendar.objects.get_or_create(
user=user,
date=date,
time=time,
location=location
)
if created:
serializer = CalenderSerializer(exists, context={'request': request})
t = threading.Timer(60.0, auto_delete(calendar.id), args=None, kwargs=None)
t.start()
return Response({'response': 'created', 'result': serializer.data, })

else:
return Response({'response': 'Exists'})
def auto_delete(calandar_id):
calendar_id = calandar_id
item = Calendar.objects.get(id=calender_id)
if item.conformation == False:
item.delete()
return Response({'response': 'item deleted'})

创建日历对象时,我想在 1 分钟后调用auto_delete函数。调用post函数时,auto_delete函数会立即工作。计时器不工作 谁能帮我解决这个问题?

根据下面的行,

t = threading.Timer(60.0, auto_delete(calendar.id), args=None, kwargs=None)

您正在立即调用该函数,而不让线程处理它。而是像这样将arg传递给计时器。

t = threading.Timer(60.0, auto_delete, args=[calendar.id], kwargs=None)

最新更新