thread - time.sleep python 3
time.sleep-duerme hilo o proceso? (6)
En Python para * nix, ¿ time.sleep()
bloquea el hilo o el proceso?
Bloquea el hilo. Si observas en Módulos / timemodule.c en la fuente de Python, verás 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 sigan ejecutándose mientras que el actual duerme. También puedes 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 se imprimirá:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
El hilo se bloqueará, pero el proceso aún está vivo.
En una aplicación de un solo hilo, esto significa que todo está bloqueado mientras duermes. En una aplicación multiproceso, solo se bloqueará el subproceso que ''duermes'' explícitamente y los otros subprocesos aún se ejecutarán dentro del proceso.
El proceso no es ejecutable por sí mismo. En lo que respecta a la ejecución, el proceso es solo un contenedor para hilos. Lo que significa que no puedes pausar el proceso en absoluto. Simplemente no es aplicable al proceso.
Sólo el hilo.
Simplemente suspenderá el subproceso, excepto en el caso de que su aplicación tenga solo un único subproceso, en cuyo caso suspenderá el subproceso y, efectivamente, también el proceso.
Sin embargo, la documentación de python sobre el sueño no especifica esto, ¡así que ciertamente puedo entender la confusión!
Solo el hilo a menos que su proceso tenga un solo hilo.