¿Es posible programar un evento en python sin multithreading? Estoy tratando de obtener algo así como programar una función para ejecutar cada x segundos.¿Cómo programar un evento en python sin multithreading?
Respuesta
Tal vez sched?
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.
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
¿Es esto lo que quieres? Esto bloquearía su aplicación por 'x' segundos completamente sin permitirle hacer nada. –
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?
Estoy bastante seguro de que esto no es lo que él quería. :) –
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.
@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
De nada, Hugh. –
- 1. ¿Programar aplicaciones web en python sin un marco?
- 2. C# Multithreading - Invoque sin control
- 3. Python twisted: ¿cómo programar?
- 4. jython multithreading
- 5. Programar un evento regular: alternativas de Cron/Cron (incluido Apio)
- 6. ¿Herramienta WYSIWYG para programar GUI en Python?
- 7. Programar Python Script - Windows 7
- 8. programar una cita repetitiva en Python 3
- 9. Multithreading un archivo masivo lea
- 10. Verdadero multithreading con boost.python
- 11. Multithreading en Bash
- 12. ¿Cómo programar un procedimiento almacenado?
- 13. Multithreading en LLVM
- 14. Multithreading: ¿Cuándo usaría un Join?
- 15. Multithreading en Lua
- 16. Multithreading en asp.net
- 17. Multithreading en PHP
- 18. ¿Cómo puede alguien sin experiencia aprender a programar?
- 19. Multithreading en Visual Basic 6.0
- 20. UIGraphicsBeginImageContextWithOptions y Multithreading
- 21. Cómo puedo programar un hilo en particular en Blackberry
- 22. ¿Cómo programar hex2bin en Javascript?
- 23. Multithreading en C++ ... ¿por dónde empezar?
- 24. ¿Cómo comenzar a programar un microcontrolador?
- 25. Javascript - ¿Cómo programar un contador de clics?
- 26. STAThread y multithreading
- 27. ¿Cómo programar un grupo de conexiones?
- 28. Cambiar hash sin activar un evento hashchange
- 29. Ruby multithreading/multiprocesamiento lecturas
- 30. Multithreading con Matlab
Esto parece ser exactamente lo que estoy buscando, gracias. – relima
Si es exactamente lo que está buscando, presione el botón I-Love-Your-Answer. – hughdbrown