Obsługa spamowania API endpoint, python3.6

0

Dzień dobry. Mam aplikację, w której on-demand aktualizuje się pewien wewnętrzny stan poprzez API. Problem w tym, że nie mam kontroli nad tym, kiedy jest to aktualizowane - to wybór usera. Może napieprzać w przycisk "aktualizuj" ile chce. I tego chciałbym uniknąć. Napisałem wrapper, który blokuje wywołania funkcji częściej niż podany czas.

import time
from functools import wraps
from datetime import timedelta, datetime


def updater(delta_time):
    def updater_impl(function):
        @wraps(function)
        def updater_impl_impl(*args, **kwargs):
            now = datetime.now()
            if not hasattr(function, '__updater_last_call_time'):
                function.__updater_last_call_time = datetime.min

            if now - function.__updater_last_call_time > delta_time:
                function(*args, **kwargs)
                function.__updater_last_call_time = now

        return updater_impl_impl

    return updater_impl


@updater(timedelta(seconds=10))
def foo():
    print(foo.__qualname__)


if __name__ == '__main__':
    foo()  # calls foo
    foo()  # not calls foo
    foo()  # not calls foo
    foo()  # not calls foo
    time.sleep(10)
    foo()  # calls foo
    foo()  # not calls foo
    time.sleep(5)
    foo()  # not calls foo

Co o tym myślicie? Może jest lepszy / gotowy sposób na rozwiązanie takiego problemu?

1

Test statusu zakończenia poprzedniej aktualizacji (lub jak wolisz "aktualizacji w trakcie")
Kolejkowanie aktualizacji.

Inne sposoby także ale po zrozumieniu celu ... Od czasu bałbym się uzależniać. Czas w systemach nie jest ciągły i może biec wstecz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1