2013-04-11 3 views
5

Я пытаюсь написать программу, которая создает новые потоки в цикле и не ждет их завершения. Как я понимаю, если я использую .start() в потоке, мой основной цикл должен просто продолжаться, а другой поток будет работать и в то же самое времяpython threading blocks

Однако, как только начнется мой новый поток, цикл цикла до тех пор, пока поток не завершится. Я неправильно понял, как работает потоки в python, или есть что-то глупое, что я делаю.

вот мой код для создания новых тем.

def MainLoop(): 
    print 'started' 
    while 1: 
     if not workQ.empty(): 
      newThread = threading.Thread(target=DoWorkItem(), args=()) 
      newThread.daemon = True 
      newThread.start() 
     else: 
      print 'queue empty' 

благодарит всех

ответ

12

Это вызывает функцию и передает ее результат в target:

threading.Thread(target=DoWorkItem(), args=()) 

Потерять круглые скобки, чтобы передать сам объект функции:

threading.Thread(target=DoWorkItem, args=()) 
+0

Ха-ха, я сделал ту же самую глупую ошибку ^^. Благодаря! –

-3

Я не люблю использовать Очередь. Вы могли бы попробовать мой midd:

import threading 
import time 

THREAD_NUM = 5 

def f(x): 
    if x > 20 and x < 30: 
     time.sleep(5) 
    print 'params: %s \n' % x 

if __name__ == '__main__': 
    queue_list = range(100) 
    for params in queue_list: 
     while True: 
      if threading.active_count() < THREAD_NUM: 
       break 
     threading.Thread(target=f, args=(params,)).start()