Projet

Général

Profil

Bug #42146

api datetimes, optimisation make_aware

Ajouté par Frédéric Péters il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
27 avril 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Sur un gros appel (816400 TimeSlot), il y a 31 secondes passées dans get_time_slots, dont 21 dans le make_aware de

-            yield TimeSlot(
-                start_datetime=make_aware(event_datetime), meeting_type=meeting_type, desk=self.desk

Grossier patch sans réfléchir vraiment (aux histoires de changement d'heure), juste en réduisant le make_aware à une fois par jour :

@@ -440,9 +456,15 @@ class TimePeriod(models.Model):
         event_datetime = real_min_datetime.replace(
             hour=self.start_time.hour, minute=self.start_time.minute, second=0, microsecond=0
         )
+        event_aware_datetime = make_aware(event_datetime)
+
         while event_datetime < max_datetime:
             end_time = event_datetime + meeting_duration
             next_time = event_datetime + duration
+            next_aware_time = event_aware_datetime + duration
             if end_time.time() > self.end_time or event_datetime.date() != next_time.date():
                 # back to morning
                 event_datetime = event_datetime.replace(
@@ -450,15 +472,26 @@ class TimePeriod(models.Model):
                 )
                 # but next week
                 event_datetime += datetime.timedelta(days=7)
+                event_aware_datetime = make_aware(event_datetime)
                 next_time = event_datetime + duration
+                next_aware_time = event_aware_datetime + duration

             if event_datetime > max_datetime:
                 break

             yield TimeSlot(
-                start_datetime=make_aware(event_datetime), meeting_type=meeting_type, desk=self.desk
+                start_datetime=event_aware_datetime, meeting_type=meeting_type, desk=self.desk
             )
             event_datetime = next_time
+            event_aware_datetime = next_aware_time

Fichiers

Révisions associées

Révision 4fac2c3c (diff)
Ajouté par Frédéric Péters il y a environ 4 ans

misc: compute time slots using tz-aware datetimes (#42146)

Historique

#1

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Assigné à mis à Frédéric Péters
#2

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Nouveau à En cours
#4

Mis à jour par Frédéric Péters il y a environ 4 ans

#42142 pour la branche et le jenkins.

#5

Mis à jour par Emmanuel Cazenave il y a environ 4 ans

  • Statut changé de Solution proposée à Solution validée

On doit pouvoir se passer de ça :

min_datetime = min_datetime
max_datetime = max_datetime

Et ok.

#6

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)

Dommage qu'on ne pas gagner trois secondes en virant ça.

commit 4fac2c3cd129ba5b5fb867da868fb8abbd91c326
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Apr 27 18:25:08 2020 +0200

    misc: compute time slots using tz-aware datetimes (#42146)
#7

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF