2008-09-18 9 views

Respuesta

268

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 
+0

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

+0

@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). –

+2

¿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

39

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.

http://docs.python.org/2/library/time.html

+2

@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

8

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.

1

Sólo el hilo a menos que el proceso tiene un solo hilo.

1

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.

+0

¿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

+0

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. –

Cuestiones relacionadas