Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Individual 05. 09. 2021, 10:57:14

Název: Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Individual 05. 09. 2021, 10:57:14
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...
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: tecka 05. 09. 2021, 11:30:19
Pravděpodobně už v systému máš cron a bude ti stačit.
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Individual 05. 09. 2021, 11:46:40
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.
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Ondřej Kolín 05. 09. 2021, 11:52:21
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).
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Filip Jirsák 05. 09. 2021, 13:18:45
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.
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 05. 09. 2021, 14:25:12
pokud pouzivate celery tak https://docs.celeryproject.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.apply_async
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: greenlinuxguru 05. 09. 2021, 17:06:29
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.
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 05. 09. 2021, 17:26:55
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.
Název: Re:Python Django - provedení určité akce v uživatelem definovány čas
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 05. 09. 2021, 17:34:23
https://www.root.cz/clanky/celery-system-implementujici-asynchronni-fronty-uloh-pro-python/

https://www.root.cz/clanky/nastroj-huey-uzitecna-knihovna-pro-praci-s-frontami-uloh-v-pythonu/