tiempo.sueño — duerme subproceso o proceso?
-
01-07-2019 - |
Pregunta
En Python para *nix, no time.sleep()
bloquear el hilo o el proceso?
Solución
Bloquea el hilo.Si nos fijamos en los Módulos/timemodule.c en la fuente de Python, verás que en la llamada a floatsleep()
, la parte sustantiva del sueño operación está envuelto en un Py_BEGIN_ALLOW_THREADS y Py_END_ALLOW_THREADS bloque, permitiendo que los otros hilos a seguir para ejecutar mientras que el actual se duerme.También puede probar esto con un simple programa en 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 va a imprimir:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Otros consejos
Se acaba de dormir el hilo, excepto en el caso de que su aplicación tiene un único hilo, en cuyo caso se pondrán a dormir el hilo y eficaz el proceso.
La documentación de python en el sueño no especifica esto, sin embargo, por lo que, sin duda, puedo entender la confusión!
Sólo el hilo.
El hilo de bloque, pero el proceso todavía está vivo.
En un solo subproceso de la aplicación, esto significa que todo está bloqueado, mientras que usted duerme.En una aplicación multiproceso, sólo el hilo explícitamente 'sueño' se bloquea y los otros hilos todavía se ejecutan dentro del proceso.
Sólo el hilo a menos que su proceso tiene un solo hilo.
El proceso no es ejecutable por sí mismo.En lo que respecta a la ejecución, el proceso es sólo un contenedor para los subprocesos.Lo que significa que usted no puede detener el proceso en absoluto.Simplemente no es aplicable al proceso.