Cómo usar múltiples hilos

Tengo este codigo

import thread def print_out(m1, m2): print m1 print m2 print "\n" for num in range(0, 10): thread.start_new_thread(print_out, ('a', 'b')) 

Quiero crear 10 hilos, cada hilo ejecuta la función print_out , pero fallé. Los errores son los siguientes:

 Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr Unhandled exception in thread started by sys.excepthook is missing lost sys.stderr 

En primer lugar, debe usar el módulo de threading nivel superior y específicamente la clase Thread . El módulo de thread no es lo que necesitas.

A medida que extienda este código, lo más probable es que también desee esperar a que finalicen los subprocesos. A continuación se muestra una demostración de cómo usar el método de join para lograrlo:

 import threading class print_out(threading.Thread): def __init__ (self, m1, m2): threading.Thread.__init__(self) self.m1 = m1 self.m2 = m2 def run(self): print self.m1 print self.m2 print "\n" threads = [] for num in range(0, 10): thread = print_out('a', 'b') thread.start() threads.append(thread) for thread in threads: thread.join() 

Debes dejar que el hilo principal permanezca vivo por un rato. Si el hilo principal muere, también lo harán todos los demás hilos y, por lo tanto, no verá ningún resultado. Intente agregar un time.sleep(0.1) al final del código y luego verá la salida.

Después de eso, puedes echar un vistazo al thread.join() para tener más idea de esto.

El otro enfoque es usar la clase de subprocesos.

  instance[num]=threading.Thread(target=print_out, args=('a', 'b')) instance[num].start()