2010-03-17 36 views

回答

1

我已經做了同樣的事情來處理使用信號量的網頁統計。實質上,隨着進程的創建,信號量會增加。當他們退出時,它會減少。當信號量阻塞時,創建過程被阻塞。

這實際上會觸發線程,這會使外部進程向下執行一些路徑。

下面是一個例子。

 

    thread_sem = threading.Semaphore(int(cfg.maxthreads)) 
    for k,v in log_data.items(): 
     thread_list.append(ProcessorThread(int(k), v, thread_sem)) 
     thread_list[-1].start() 
 

然後在構造函數ProcessorThread,我這樣做:

 

    def __init__(self, siteid, data, lock_object): 
     threading.Thread.__init__(self) 
     self.setDaemon(False) 
     self.lock_object = lock_object 
     self.data = data 
     self.siteid = siteid 
     self.lock_object.acquire() 
 

當線程完成它的任務(無論成功與否),該lock_object被釋放,允許另一個進程開始。

HTH