En Python para * nix, ¿ time.sleep()
bloquea el hilo o el proceso?
En Python para * nix, ¿ time.sleep()
bloquea el hilo o el proceso?
Respuestas:
Bloquea el hilo. Si mira en Módulos / timemodule.c en la fuente de Python, verá que en la llamada a floatsleep()
, la parte sustantiva de la operación de suspensión está envuelta en un bloque Py_BEGIN_ALLOW_THREADS y Py_END_ALLOW_THREADS, permitiendo que otros hilos continúen ejecutándose mientras el actual uno 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 dormirá el hilo, excepto en el caso en que su aplicación tenga un solo hilo, en cuyo caso dormirá el hilo y también el proceso de manera efectiva.
Sin embargo, la documentación de Python sobre el sueño no especifica esto, ¡así que ciertamente puedo entender la confusión!
El hilo se bloqueará, pero el proceso aún está vivo.
En una aplicación de un solo subproceso, esto significa que todo está bloqueado mientras duerme. En una aplicación multiproceso, solo se bloqueará el subproceso que explícitamente 'duerme' y los otros subprocesos aún se ejecutan dentro del proceso.
El proceso no es ejecutable por sí mismo. En cuanto a la ejecución, el proceso es solo un contenedor para subprocesos. Lo que significa que no puedes pausar el proceso en absoluto. Simplemente no es aplicable al proceso.
sleep
comando detendrá.
bloquea un hilo si se ejecuta en el mismo hilo no si se ejecuta desde el código principal