En Python para * nix, ¿time.sleep()
bloquea el hilo o el proceso?time.sleep - ¿Duerme el hilo o el proceso?
Respuesta
Bloquea el hilo. Si busca en Módulos/timemodule.c en la fuente de Python, verá que en la llamada al floatsleep()
, la parte sustantiva de la operación de suspensión se envuelve en un bloque Py_BEGIN_ALLOW_THREADS y Py_END_ALLOW_THREADS, permitiendo que otros hilos continúen ejecutándose mientras el el actual duerme. También puede probar esto con un simple programa de Python:
import time
from threading import Thread
class worker(Thread):
def run(self):
for x in xrange(0,11):
print x
time.sleep(1)
class waiter(Thread):
def run(self):
for x in xrange(100,103):
print x
time.sleep(5)
def run():
worker().start()
waiter().start()
que imprimirá:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Solo el hilo.
Simplemente dormirá el hilo excepto en el caso de que su aplicación tenga solo un hilo, en cuyo caso dormirá el hilo y también el proceso.
La documentación de Python sobre el modo de suspensión no lo especifica, así que ciertamente puedo entender la confusión.
@MichaelMrozek: ['sleep (3)' dice: * "sleep() hace que el hilo de llamada duerma hasta que han transcurrido segundos o llega una señal que no se ignora." *] (Http: // man7. org/linux/man-pages/man3/sleep.3.html) Y [hay un error en la documentación de Python] (http://bugs.python.org/issue23251). – jfs
El hilo bloqueará, pero el proceso es todavía vivo.
En una sola aplicación de rosca, esto significa que todo está bloqueado mientras duerme. En una aplicación multiproceso, solo se bloqueará el hilo explícitamente 'suspendido' y los otros hilos seguirán ejecutándose dentro del proceso.
Sólo el hilo a menos que el proceso tiene un solo hilo.
El proceso no se puede ejecutar solo. En lo que respecta a la ejecución, el proceso es solo un contenedor de hilos. Lo que significa que no puedes pausar el proceso en absoluto. Simplemente no es aplicable al proceso.
¿Huh? Esto puede ser cierto en Windows o algo así, pero ciertamente no universalmente.Tradicionalmente, Unix no tenía ningún tipo de subprocesos, por lo que un programa Python ejecuta un proceso (con un único hilo, en cierto sentido abstracto) que es lo que el comando 'sleep' se detendrá. – tripleee
Triste de decepcionarlo, pero en Windows y todos los sistemas * nix, la unidad principal de ejecución es un hilo. No puede ejecutar el proceso sin hilos. Si sale del último hilo, el proceso finaliza. –
- 1. Interrumpir o detener un hilo que duerme
- 2. ¿El proceso CLOCK_MONOTONIC (o hilo) es específico?
- 3. Interrumpir un hilo que duerme
- 4. Python time.sleep
- 5. Iniciando un hilo que duerme en .NET
- 6. C# ¿El subproceso no duerme?
- 7. ¿Por qué el hilo no se interrumpe cuando duerme en el bloque
- 8. Manejando el hilo principal del proceso
- 9. ¿Hay alguna manera de despertar un hilo que duerme?
- 10. ¿Hay alguna manera de detener el tiempo. ¿Duerme en Windows?
- 11. Establecer el hilo como fondo o no
- 12. Ejecutar un proceso o hilo por separado en Qt
- 13. C# Duerme durante 500 milisegundos
- 14. time.sleep requiere enteros?
- 15. proceso generado a través Process.Start en .NET cuelga el hilo
- 16. Python: alta precisión time.sleep
- 17. ¿Cuál es el alcance del hilo del finalizador, por dominio de aplicación o por proceso?
- 18. Detener el hilo en python3
- 19. Wifi duerme, incluso con cerradura
- 20. El proceso finaliza debido a StackOverflowException
- 21. iPhone: ¿Cómo determinar si el hilo es el hilo principal?
- 22. Cómo detener la depuración (o separar el proceso) sin detener el proceso?
- 23. tail -f en python sin time.sleep
- 24. ¿Cómo rastrear el proceso hijo usando strace?
- 25. ¿Cómo puedo cambiar la CurrentCulture de todo el proceso (no solo el hilo actual) en .Net?
- 26. ¿Cuál es la diferencia entre el proceso ligero y el hilo?
- 27. ¿cómo puedo saber si pthread_self es el hilo principal (primero) en el proceso?
- 28. Función setDaemon en el hilo
- 29. Boost.Thread o solo :: hilo?
- 30. cómo matar el hilo php de fondo?
Cómo se ilustra el bloqueo de un "hilo". Y por qué no solo se imprimen 5 y 103, mientras que todos los demás números se imprimen. Sería realmente útil para mí si alguien pudiera explicarme. – akki
@akki: por favor haga una nueva pregunta en lugar de usar los comentarios de una pregunta anterior. Además, 5 se imprime (está justo antes de 101). –
¿Abrir una nueva pregunta para preguntar el significado de esta respuesta? Eso me parece bastante extraño. Y quise decir 11 (no 5), lo siento, no puedo corregir mi comentario ahora. Realmente necesito algo de ayuda para entender qué punto está tratando de hacer esta respuesta. – akki