Quiero saber cómo llamar a una función después de un tiempo determinado. He intentado time.sleep() pero esto detiene todo el script. Quiero que la secuencia de comandos continúe, pero después de "segundos" llamar a una función y ejecutar la otra secuencia de comandos al mismo tiempoPython Time Delays
Respuesta
Eche un vistazo a threading.Timer
. Ejecuta tu función en un nuevo hilo.
from threading import Timer
def hello():
print "hello, world"
t = Timer(30.0, hello)
t.start() # after 30 seconds, "hello, world" will be printed
Si desea una función a ser llamada después de un tiempo y no para detener la secuencia de comandos que está inherentemente trata de código de roscado. Si desea establecer una función para llamar y no preocuparse por ella, debe utilizar explícitamente multi-threading, como el answr de Mark Byers, o utilizar un marco de codificación que tenga un bucle principal que se encargue del despacho de funciones para usted - como twisted, qt, gtk, pyglet, y tantos otros. Cualquiera de estos requerirá que reescribas tu código para que funcione desde el bucle principal de ese marco.
O bien, o escribiendo un bucle principal desde el evento que se verifica en su código - En general, si lo único que desea son llamadas de función única, threading.Timer es la manera de hacerlo. Si desea utilizar estas llamadas programadas para buclear realmente el programa como se hace generalmente con setTimeout de javascript, es mejor que seleccione uno de los marcos de codificación que enumeré arriba y refactorice su código para aprovecharlo.
Este código no funciona threading.Timer (30.0, self.timestart (ventana)) .start() Se llama self.timestart, dando a la ventana arg, pero lo está haciendo Inmediatamente, no después de 30 seg Would Le pregunté a Mark, pero ya le he molestado lo suficiente, y tú también sabes lo que estás hablando :) – drnessie
import threading
def time_demo():
threading.Timer(5.0, time_demo()).start()
print 'Hello this is time demo function'
time_demo()
Tu código se bloquea porque tienes una recursividad infinita, necesitas quitar los paréntesis cuando pasas en time_demo porque debería estar pasando en un puntero de función. – cujo
- 1. Python ftplib time out
- 2. str to time en python
- 3. objeto python socket accept time out
- 4. ISO Time (ISO 8601) en Python?
- 5. Python: "nombre global 'time' no está definido"
- 6. Android Time vs Java Time
- 7. MySQL create time y update time timestamp
- 8. Android dev time vs iPhone dev time
- 9. Humanizing time
- 10. Diferencia entre los módulos Python datetime vs time
- 11. Java Time Savers
- 12. advertencia: Time # succ está obsoleto; use time + 1
- 13. Solr Index time boost VS Query time boosting?
- 14. HWND Creation Time
- 15. MSBuild MSBuildCommunityTasks Task Time
- 16. English to Time
- 17. Streaming Real time Audio
- 18. Game Center Formatting Time
- 19. .NET Greenwich Mean Time
- 20. C# Design Time Path
- 21. android countdown timer time
- 22. Asp.NET Real Time Game
- 23. UNIX stat time format
- 24. silverlight Time Zone convirtiendo
- 25. ¿Cómo usar scala-time?
- 26. ¿Rails ActiveSupport Time Parsing?
- 27. Analizando Joda-Time Partials
- 28. Time and Nhibernate
- 29. ASP.NET UpdatePanel Time Out
- 30. srandom (time (NULL))
multithreading ... hmm, suena familiar. ¿No es que había más de un proceso? Bueno, de todos modos, eso se ve bien. si utilizo t.start() más de una vez, ¿continúa, me da un error o reinicia el temporizador? – drnessie
@drnessie: "¿No es que había más de un proceso?" No, es cuando tienes más de un hilo. "si uso t.start() más de una vez, ¿continúa, me da un error o reinicia el temporizador?" - Obtiene un error 'RuntimeError: thread already started' que puede verificar fácilmente duplicando la última línea del código fuente anterior y ejecutándolo. –
¿Hay alguna forma de deshacerse del error, además de detener y luego reiniciar el temporizador? – drnessie