Как использовать несколько потоков

У меня есть этот код:

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')) 

Я хочу создать 10 потоков, каждый поток выполняет функцию print_out , но я потерпел неудачу. Ошибки заключаются в следующем:

 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 

Прежде всего, вы должны использовать модуль threading более высокого уровня и, в частности, класс Thread . Модуль thread не то, что вам нужно.

По мере расширения этого кода вы, скорее всего, также захотите дождаться завершения потоков. Ниже приведена демонстрация того, как использовать метод join для достижения этого:

 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() 

Вы должны позволить основной нити оставаться в живых на некоторое время. Если основной поток затухает, так будут и все остальные потоки, и, следовательно, вы не увидите никакого выхода. Попробуйте добавить time.sleep(0.1) в конце кода, а затем вы увидите результат.

После этого вы можете взглянуть на thread.join() чтобы получить больше информации об этом.

В другом подходе используется класс потоковой передачи.

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