Guide

Processi a tempo
Published by Rafanto on 15/1/2007 (1900 reads)
Capita spesso di dover avviare un processo in un determinato istante di tempo nell'arco della giornata (esempio: uno shutdown sincronizzato a mezzanotte). Un esempio di come realizzare un semplicissimo (15 righe) script in python che ci permette di farlo.

Siccome mi serviva la seguente funzione , e non conosco bene il python ho trovato sul web questo bello script ed ho voluto proporlo .. magari può servire !!

l'autore è mozako - mozako at openbeer dot it



#!/usr/bin/python
# TPy - A very simple script to sync. a process
# by mozako - mozako at openbeer dot it
# Fri Dec 9 11:16:44 CET 2005

from time import gmtime, strftime
import os, sys

HHMM = raw_input("Digitare l'ora nel formato HHMM: ")
PROCESSO = raw_input("Scrivere il processo da avviare: ")

while 1:
ora = strftime("%H", gmtime())
ora = int(ora) + 1
minuti = strftime("%M", gmtime())
mix = str(ora) + minuti
if (mix == HHMM):
os.system(PROCESSO)
sys.exit(0)
else:
pass



In seguito all'esecuzione dello script verrà visualizzato il seguente output:

$ date
Fri Dec 9 11:25:07 CET 2005


$ python TP.py
Digitare l'ora nel formato HHMM: 1126
Scrivere il processo da avviare: uname a; date
Linux
Fri Dec 9 11:26:00 CET 2005


$ date
Fri Dec 9 11:26:07 CET 2005


I commenti sono proprietà dei rispettivi autori. Non siamo in alcun modo responsabili del loro contenuto.
Autore Albero
Moreno
Inviato: 16/1/2007 15:52  Aggiornato: 16/1/2007 15:58
Utente
Iscritto: 3/10/2005
Da:
Inviati: 53
 Re: Processi a tempo
Ciao

Brrrr, uno script del genere mi fa accapponare la pelle.

Un loop continuo in attesa di un tempo predeterminato non è proprio il massimo dell'efficenza.

Esiste in tutti i linguaggi la funzione sleep (x) in python è time.sleep(x) che permette di addormentare il processo e risvegliarlo dopo un tempo prestabilito senza minimamente pesare sulle risorse della CPU.

Un altro grossolano errore è:

if (mix == HHMM)

E' vero che qui si parla di minuti ma quando si attende un conteggio è sempre meglio considerare anche il superamento del set, quindi l'istruzione più corretta è:
if (mix >= HHMM)

In questo modo anche se il sistema va in sleep per un minuto proprio allo scadere del tempo il sistema si riprende il minuto dopo altrimenti è finita.


Ciao Ciao Moreno
TiConZero
Inviato: 17/1/2007 12:20  Aggiornato: 17/1/2007 12:20
Geek
Iscritto: 14/6/2004
Da:
Inviati: 316
 Re: Processi a tempo
penso che usare cron sia decisamente meglio...inoltre hai verificato come si comporta la cpu con un processo che sta a looppare in continuazione?
rafanto
Inviato: 17/1/2007 13:10  Aggiornato: 17/1/2007 13:10
Monster
Iscritto: 2/4/2004
Da: Platania
Inviati: 744
 Re: Processi a tempo
Si lo script nn è perfetto ma cmq può essere di spunto a chi si avvicina al python .. magari potete mettere voi una versione ottimizzata del codice che ho pubblicato !!

renatoram
Inviato: 25/1/2007 10:36  Aggiornato: 25/1/2007 10:36
Monster
Iscritto: 12/5/2004
Da: Sant'Agostino Creek
Inviati: 2281
 Re: Processi a tempo
Capisco l'intento di studio, ma...

man at


da cui un estratto:
SINTASSI
       at [-V] [-q coda] [-f file] [-mldbv] ORARIO

(...)

DESCRIZIONE
       at e batch leggono da standard input o da un file  specificato  comandi
       da eseguire in un successivo momento usando /bin/sh.

       at      esegue un comando a un’ora specificata.
Albus-Silente
Inviato: 26/2/2007 17:44  Aggiornato: 26/2/2007 17:44
Utente
Iscritto: 29/10/2004
Da: Bruxelles (Belgio)
Inviati: 194
 Re: Processi a tempo
il problema di at e che usa /bin/sh.
ergo se devi usare variabili ambiente te le
devi tutte reimpostare (se già non lo sono).

Anche se puoi passare un file, non so per quale ragione, non prende mai in considerazione #!/bin/bash e non per ultimo non è semplicissimo per farlo partire!

CMQ credo che il cron sia la cosa migliore ma non un loop continuo!!

Ciao J