Bug #42146
api datetimes, optimisation make_aware
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
Historique
Mis à jour par Frédéric Péters il y a environ 4 ans
- Fichier 0002-misc-compute-time-slots-using-tz-aware-datetimes-421.patch 0002-misc-compute-time-slots-using-tz-aware-datetimes-421.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
#42142 pour la branche et le jenkins.
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.
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)
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
misc: compute time slots using tz-aware datetimes (#42146)