2010-10-20 16 views

risposta

4

Forse sched?

+0

Questo sembra essere esattamente quello che sto cercando, grazie. – relima

+1

Se è esattamente quello che stai cercando, premi il pulsante I-Love-Your-Answer. – hughdbrown

2

È possibile utilizzare una combinazione di signal.alarm e un gestore di segnale per SIGALRM in modo da ripetere la funzione ogni 5 secondi.

import signal 

def handler(sig, frame): 
    print "I am done this time" 
    signal.alarm(5) #Schedule this to happen again. 

signal.signal(signal.SIGALRM, handler) 

signal.alarm(5) 

L'altra opzione è quella di utilizzare il modulo sched che arriva con Python, ma non so se si utilizza i thread o no.

2

Sched è probabilmente la strada da percorrere per questo, come sottolinea @eumiro. Tuttavia, se non si vuole farlo, allora si potrebbe fare questo:

import time 
while 1: 
    #call your event 
    time.sleep(x) #wait for x many seconds before calling the script again 
+1

È questo quello che vuoi? Ciò bloccherebbe completamente la tua applicazione per 'x' secondi, impedendogli di fare qualsiasi cosa. –

1

Senza threading rende raramente senso chiamare periodicamente una funzione. Perché il tuo thread principale è bloccato dall'attesa - semplicemente non fa nulla. Tuttavia, se si vuole veramente fare così:

import time 

for x in range(3): 
    print('Loop start') 
    time.sleep(2) 
    print('Calling some function...') 

io questa cosa si vuole veramente?

+0

Sono abbastanza sicuro che questo non è quello che voleva. :) –

2

Potreste usare celery:

Il sedano è un asincrono coda di coda compito/lavoro open source basata su messaggio distribuito passa. È incentrato sul funzionamento in tempo reale, ma supporta anche la pianificazione.

Le unità di esecuzione, denominate attività, sono eseguite contemporaneamente su uno o più nodi di lavoro . Le attività possono eseguire in modo asincrono (in background) o in modo sincrono (attendere che sia pronto).

e un esempio di codice:

Probabilmente vogliono vedere qualche codice da ora, quindi ecco un compito esempio aggiungendo due numeri:

from celery.decorators import task 

@task 
def add(x, y): 
    return x + y 

È può eseguire l'attività nello sfondo o attendere che termini:

>>> result = add.delay(4, 4) 
>>> result.wait() # wait for and return the result 8 

Questo è più utile in generale che il problema che si descrive richiede, però.

+0

@Noufal Ibrahim: Grazie per la cattura.Non ho notato che quando ho tagliato e incollato il codice dal sito di sedano, la parte '@ task' non era formattata correttamente. – hughdbrown

+0

Sei il benvenuto Hugh. –

Problemi correlati