Pregunta

En Python para *nix, no time.sleep() bloquear el hilo o el proceso?

¿Fue útil?

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!

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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top