Python dateutil.rrule невероятно медленный - PullRequest
2 голосов
/ 26 августа 2009

Я использую модуль python dateutil для календарного приложения, которое поддерживает повторяющиеся события. Мне очень нравится возможность разбирать правила с помощью функции rrulestr (). Кроме того, использование rrule.between () для получения дат в заданном интервале очень быстрое.

Однако, как только я пытаюсь выполнить какие-либо другие операции (то есть: список фрагментов, до (), после (), ...), все начинает сканироваться. Похоже, dateutil пытается вычислить каждую дату, даже если все, что я хочу, это получить последнюю дату с помощью rrule.before (datetime.max).

Есть ли способ избежать этих ненужных вычислений?

1 Ответ

4 голосов
/ 26 августа 2009

Наверное, нет. Последняя дата до datetime.max означает, что вы должны рассчитать все повторения вплоть до datetime.max, и это будет разумно МНОГО повторений. Может быть возможно добавить ярлыки для некоторых простых повторений. Например, если каждый год в один и тот же день, вам не нужно, например, вычислять повторения между ними. Но если у вас есть что-то третье, что вам нужно, например, а также, если у вас максимальное количество повторений и т. Д. Но я думаю, у dateutil нет этих ярлыков. Вероятно, это будет довольно сложно реализовать надежно.

Могу ли я спросить, почему вам нужно найти последнее повторение до datetime.max? В конце концов, в будущем почти восемь тысяч лет ...: -)

...