2010-03-17 56 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