2013-04-11 143 views
5

我想寫一個程序,它在循環中創建新線程,並不等待它們完成。 據我瞭解,如果我在線程上使用.start(),我的主循環應該繼續,而另一個線程將關閉並同時完成其工作蟒蛇線程塊

但是,一旦我的新線程啓動,循環塊直到線程完成。 我誤解了線程是如何在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

哈哈,我犯了同樣的愚蠢錯誤^^。謝謝! – 2015-06-17 20:09:20

-3

我不喜歡使用隊列。你可以嘗試我的方法:

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