2011-02-26 11 views
17

Soy un novato en la programación de python, lo que entiendo es que un proceso puede ser un daemon, pero un hilo en modo daemon, no podría entender el uso de esto, solicitaría el pitón gurús para ayudarme a entender esto. Gracias por adelantado.Función setDaemon en el hilo

+0

La mejor respuesta es http://stackoverflow.com/a/190017/260122. – clacke

+1

Posible duplicado de [Daemon Threads Explanation] (http://stackoverflow.com/questions/190010/daemon-threads-explanation) – clacke

Respuesta

33

Aquí hay un código básico utilizando roscado:

import Queue 
import threading 

def basic_worker(queue): 
    while True: 
     item = queue.get() 
     # do_work(item) 
     print(item) 
     queue.task_done() 
def basic(): 
    # http://docs.python.org/library/queue.html 
    queue = Queue.Queue() 
    for i in range(3): 
     t = threading.Thread(target=basic_worker,args=(queue,)) 
     t.daemon = True 
     t.start() 
    for item in range(4): 
     queue.put(item) 
    queue.join()  # block until all tasks are done 
    print('got here') 

basic() 

Cuando se ejecuta, se obtiene

% test.py 
0 
1 
2 
3 
got here 

Ahora comentario la línea:

  t.daemon = True 

ejecutarlo de nuevo, y verá que el script imprime el mismo resultado, pero se cuelga. El hilo principal termina (obsérvese que se imprimió got here), pero el segundo hilo nunca termina.

Por el contrario, cuando t.daemon se establece en True, el hilo t finaliza cuando termina el hilo principal.

Tenga en cuenta que "hilos daemon" tiene poco que ver con daemon processes.

+0

Gracias, eso fue útil – hue

+0

¿Debería ser t.SetDaemon (True)? – GreenAsJade

+7

@GreenAsJade: [t.setDaemon (Verdadero)] (http://docs.python.org/2/library/threading.html#threading.Thread.setDaemon) es parte de la antigua API. Hoy en día, [t.daemon = True] (http://docs.python.org/2/library/threading.html#threading.Thread.daemon) es la forma recomendada de convertir 't' en un hilo de daemon. – unutbu

2

Módulo La cola ha cambiado de nombre empezando por Python3 para reflejar mejor el hecho de que hay varias clases de cola (lifo, fifo, prioridad) en el módulo. así que realice los cambios al usar este ejemplo

Cuestiones relacionadas