2013-04-11 6 views
5

मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जो एक लूप में नए धागे बनाता है, और उनके लिए समाप्त होने की प्रतीक्षा नहीं करता है। जैसा कि मैं समझता हूं कि अगर मैं धागे पर .start() का उपयोग करता हूं, तो मेरा मुख्य पाश अभी जारी रखना चाहिए, और दूसरा धागा बंद हो जाएगा और एक ही समय में उसका कामपायथन थ्रेडिंग ब्लॉक

हालांकि एक बार मेरा नया धागा शुरू हो जाने पर, धागा पूरा होने तक पाश ब्लॉक। क्या मुझे गलत समझा गया है कि पाइथन में थ्रेडिंग कैसे काम करती है, या क्या मैं कुछ बेवकूफ हूं।

यहां नए धागे बनाने के लिए मेरा कोड है।

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

मुझे कतार का उपयोग करना पसंद नहीं है। आप मेरी मिथोड को आजमा सकते हैं:

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() 
संबंधित मुद्दे