2010-10-20 6 views

Respuesta

4

Tal vez sched?

+0

Esto parece ser exactamente lo que estoy buscando, gracias. – relima

+1

Si es exactamente lo que está buscando, presione el botón I-Love-Your-Answer. – hughdbrown

2

Puede usar una combinación de signal.alarm y un manejador de señal para SIGALRM como para repetir la función cada 5 segundos.

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) 

La otra opción es utilizar el módulo sched que viene junto con Python, pero no sé si se utiliza hilos o no.

2

Sched es probablemente el camino a seguir para esto, como señala @eumiro. Sin embargo, si usted no quiere hacer eso, entonces usted puede hacer esto:

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

¿Es esto lo que quieres? Esto bloquearía su aplicación por 'x' segundos completamente sin permitirle hacer nada. –

1

Sin roscar rara vez tiene sentido para llamar a una función periódica. Debido a que su hilo principal está bloqueado por la espera, simplemente no hace nada. Sin embargo, si realmente quieren hacerlo:

import time 

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

Yo esto lo que realmente quiero?

+0

Estoy bastante seguro de que esto no es lo que él quería. :) –

2

Usted podría utilizar celery:

El apio es un asíncrono cola de cola de tareas/trabajo de código abierto basado en pasar mensaje distribuido. Es centrado en el funcionamiento en tiempo real, pero también es compatible con la programación.

Las unidades de ejecución, llamadas tareas, son ejecutadas simultáneamente en uno o más nodos de trabajador . Las tareas pueden ejecutarse de forma asincrónica (en segundo plano) o de forma síncrona (esperar hasta que esté listo).

y un ejemplo de código:

es probable que desee ver algo de código por ahora, así que aquí tiene una tarea ejemplo añadiendo dos números:

from celery.decorators import task 

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

Usted puede ejecutar la tarea en el fondo , o esperar a que termine:

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

Se trata de un uso más general que el problema que usted describe requiere, sin embargo.

+0

@Noufal Ibrahim: Gracias por la captura.No noté que cuando corté y pegué el código del sitio de apio, la parte '@ task 'se formateó incorrectamente. – hughdbrown

+0

De nada, Hugh. –