Approcci di automazione: Eventi / Trigger / Cron [chiuso]

-1

Durante la creazione di siti Web è stata la mia esperienza che la maggior parte della logica di un sistema viene eseguita quando l'input dell'utente è accettato, sia tramite POST, GET, ecc. Vorrei sapere quali processi o metodologie esistono in Python ( incline all'utilizzo di Python), PHP e Ruby che consentono alle applicazioni Web di eseguire attività automaticamente senza l'input dell'utente. Ad esempio, eseguire attività in un determinato momento o condizione o evento. Non ho esperienza con e poca conoscenza di trigger, eventi o cron, e tutti gli articoli che ho trovato su google durante le mie ricerche hanno assunto un'alta familiarità con questi concetti. Desidero semplicemente una descrizione dei modi in cui è possibile gestire i processi non reattivi in un'applicazione web.

    
posta MWGriffin 22.02.2013 - 10:14
fonte

1 risposta

0

Hai praticamente risposto alla domanda da solo: i lavori cron sono il modo standard per farlo.

In PHP, non hai molta scelta su questo: l'intera lingua è costruita con un modello di esecuzione in mente dove ottieni una lavagna pulita con ogni richiesta, e la lingua non è molto adatta per implementare a lungo - Processi di esecuzione - puoi puoi eseguirlo, ma devi stare molto attento a non far filtrare la memoria.

In Python, dipende da come si collega il codice a un server Web; se si utilizza un server Web integrato nel proprio codice in un processo a esecuzione prolungata, è possibile attivare l'elaborazione automatica direttamente da lì, il che significa che in questi casi non è necessario cron. Se, tuttavia, segui un paradigma di nuovo processo per ogni richiesta come fa PHP ( mod_python esegue questa IIRC), allora sei praticamente limitato a lavori cron o programmi di pianificazione simili.

Non so abbastanza su Ruby per fare commenti qualificati, ma presumo che la situazione sia simile a quella in Python.

Ovviamente, puoi sempre implementare un processo di lunga durata al di fuori del tuo normale sito web, che utilizza solo lo stesso backend di persistenza e condivide del codice; un tale processo potrebbe quindi implementare la propria programmazione e persino agire su altri eventi. Ad esempio, è possibile impostare un processo che si riattiva quando un particolare file cambia, esegue qualche elaborazione, quindi ritorna in stato di stop. Questo approccio ha due vantaggi:

  • Dal momento che esiste sempre una di queste procedure, non devi preoccuparti delle condizioni di gara, come quelle causate da un lavoro cron che impiega così tanto tempo che le singole iterazioni iniziano a sovrapporsi - il tuo processo esegue semplicemente una iterazione alla volta.
  • È possibile agire sugli eventi immediatamente senza aggiungere un sovraccarico di pianificazione. Con i lavori cron, devi scegliere tra polling frequente (latenza più breve, più overhead) e polling meno frequente (meno overhead, latenze più lunghe), ma un processo che attende solo un file da modificare ha un overhead quasi zero mentre inattivo.

Tuttavia è più difficile da configurare, e probabilmente vorrai una specie di meccanismo di watchdog nel caso in cui il processo muoia.

    
risposta data 22.02.2013 - 11:54
fonte

Leggi altre domande sui tag