Эффективные повторяющиеся задачи в сельдерее?

Каждый день у меня ~250 000 повторяющихся задач; примерно пятая часть из них может обновляться с разными запланированными датами каждый день.

Можно ли это сделать эффективно в Celery? - Меня беспокоит это из beat.py сельдерея. :

    def tick(self):
        """Run a tick, that is one iteration of the scheduler.

           Executes all due tasks.

       """
        remaining_times = []
        try:
            for entry in values(self.schedule):
                next_time_to_run = self.maybe_due(entry, self.publisher)
                if next_time_to_run:
                    remaining_times.append(next_time_to_run)
        except RuntimeError:
            pass

        return min(remaining_times + [self.max_interval])

person A T    schedule 22.01.2014    source источник
comment
Это примерно 3 вещи в секунду, хотя я предполагаю, что эти вещи будут сгруппированы не так хорошо. Итак: попробуйте с очень-очень легкими задачами и запустите top. 250к не огромная цифра.   -  person U2EF1    schedule 22.01.2014
comment
Возможно, мы сможем переписать это, чтобы использовать тот же алгоритм, что и таймер, использующий heapq. Вероятно ценой места и более дорогим обновлением расписания выполнения, но я думаю, что это возможно. Что-то вроде: при запуске сгенерируйте heapq, вызвав is_due для всех записей. когда запись извлекается из кучи и запускается, куча снова обновляется следующим значением .is_due(). Если расписание изменено (например, если запись изменена при использовании внутреннего планировщика базы данных), тогда куча должна быть перегенерирована с нуля.   -  person asksol    schedule 23.01.2014
comment
Да, это действительно было бы намного лучше :)   -  person A T    schedule 24.01.2014