2013-04-11 17 views
5

Sto provando a scrivere un programma che crea nuovi thread in un ciclo e non aspetta che finiscano. Come ho capito se uso .start() sul thread, il mio ciclo principale dovrebbe solo continuare, e l'altro thread andrà fuori e fare il suo lavoro allo stesso tempoblocchi di filettatura python

Tuttavia, una volta che il mio nuovo thread inizia, il blocchi di loop fino al completamento del thread. Ho frainteso come funziona il thread in python, o c'è qualcosa di stupido che sto facendo.

ecco il mio codice per la creazione di nuovi thread.

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' 

grazie tutti

risposta

12

Questa chiama la funzione e passa il suo risultato come target:

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

perdono la parentesi per passare l'oggetto funzione stessa:

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

Haha, ho fatto lo stesso stupido errore ^^. Grazie! –

-3

Non mi piace usare la coda. Potresti provare il mio esempio:

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