Python Django - provedení určité akce v uživatelem definovány čas

Potřebuji provést určitý úkol (úprava záznamu v databázi) v čas, který definoval uživatel.
Čas bude pokaždé jiný. Úkolů může být mnoho.

Hledal jsem jak na to a narazil na Celery (https://docs.celeryproject.org/en/stable/getting-started/introduction.html), ale nevím jestli je to správná volba.
 
Rad bych, aby mě někdo aspoň nasměroval správným směrem...


tecka

  • ***
  • 138
    • Zobrazit profil
    • E-mail
Pravděpodobně už v systému máš cron a bude ti stačit.

O tom jsem taky slyšel, ale stejně vůbec nevím jak na to.

Návody co jsem našel většinou popisují nějaký úkol, který se má provést třeba každou hodinu, ale já potřebuji, aby se ty úkoly prováděly pokaždé v jiný čas.

Tohle by opravdu resil (messaging queue), ale mozna ti bude stacit https://github.com/arteria/django-background-tasks, nejsem si jistej konfigurovatelnosti, jeste jsem to nepouzil a nevim jestli spada na tvuj use-case.

Mozna je to zbytecne slozite reseni pro tvuj konkretni problem. Mas dalsi dve moznosti:

Cron (viz odpoved vyse), ktery bude volat nejaky entrypoint pravidelne.
Systemd.timers https://wiki.archlinux.org/title/Systemd/Timers, ktere se mi zdaji trochu lepsi (zalezi na gustu kazdeho gentlemana)

Tyhle druhe moznosti maji ten spolecny problem: Interval definujes ty externe (v cronu, nebo v .timer). Obejit by se to dalo nejakou logikou v tom spoustenem skriptu, ktery by se spoustel casto (kazdou minutu/hodinu ... ) a logika jestli "uz ted a nebo jeste ne" by se resila v aplikaci (tady bude asi lepsi uz sahnout po jinem reseni).

Pravděpodobně už v systému máš cron a bude ti stačit.
To má ovšem tu nevýhodu, že je potřeba nakonfigurovat další systém. A individual psal o tom, že ten čas má být konfigurovatelný uživatelem. Takže buď by uživatel musel konfigurovat cron (ve skutečnosti spíš atcron slouží pro pravidelné spouštění, at pro jednorázové) nebo systemd timer – u většiny aplikací nepředstavitelné. Nebo by to musela konfigurovat aplikace, což je také docela komplikace.

Zkuste hledat „Django schedule“ nebo „Django job scheduling“ apod., případně s Pythonem místo Django. Celery mi pro to připadá jako kanón na vrabce.



to vůbec není problém, nastavte si cron, že vám každou minutu spustí skript se schedulerem, který zkontroluje, jestli je ten správný čas a případně provede akci, pokud to tedy stačí s přesností na minutu.

to vůbec není problém, nastavte si cron, že vám každou minutu spustí skript se schedulerem, který zkontroluje, jestli je ten správný čas a případně provede akci, pokud to tedy stačí s přesností na minutu.

oproti fronte uloh je to zbytecne komplikovane a malo robusni, musite rucne osetrovat, jestli predchozi spusteni dobehlo atd. Riskujete, ze v tom udelate chybu.