2013-04-11 14 views
5

Próbuję napisać program, który tworzy nowe wątki w pętli i nie czeka na ich zakończenie. Jak rozumiem, jeśli używam .start() na wątku, moja główna pętla powinna po prostu kontynuować, a drugi wątek zgaśnie i wykona swoją pracę w tym samym czasiePython threading blocks

Jednak po rozpoczęciu mojej nowej nici blokuje pętlę, dopóki wątek nie zostanie ukończony. Czy źle zrozumiałem, jak działa wątkowanie w python, czy jest coś głupiego robię.

Oto mój kod do tworzenia nowych wątków.

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' 

Dzięki wszystkim

Odpowiedz

12

To wywołuje funkcję i przekazuje jego wynik jak target:

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

utracić nawiasów przekazania obiektu funkcji, czyli:

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

Haha, popełniłem ten sam głupi błąd ^^. Dzięki! –

-3

Nie lubię używać kolejki. Możesz spróbować swoich sił:

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