[Tutor] threads

Hugo González Monteverde hugonz-lists at h-lab.net
Thu Feb 24 18:36:01 CET 2005


OK, as ignorant as I may be on threads, I have read a bit on Stackless 
Python's tasklets. Suppossedly they require much less memory than 
python's threads.

Information is at www.stackless.com

Hugo

Shitiz Bansal wrote:
> Hi,
> 
> I am trying to build a traffic network simulator using
> python, for my degree project.
> 
> I need to run at least 5-6000 cars simultaneously.I
> wanted to run each car in a separate thread.
> However , after about 400 threads i am unable to
> create new threads.
> 
> Here's the code:
> 
>>>>cars=range(1000)
>>>>for i in cars:
> 
> 	cars[i]=cars[i]=car(1,10,2,1,adjls,juncls)
> 
> 	
> 
>>>>for i in cars:
> 
> 	i.start()
> 
> Traceback (most recent call last):
>   File "<pyshell#24>", line 2, in -toplevel-
>     i.start()
> error: can't start new thread
> 
> Is there a way out.Also, are there any tips on
> performance issues?
> 
> Here is the class car:
> 
> class car(threading.Thread):
>     def
> __init__(self,carid,speed,dest,orig,adjls,juncls):
>         threading.Thread.__init__(self)
>         self.speed=speed
>         self.finished=0
>         self.carid=carid
>         self.dest=dest
>         self.orig=orig
>         self.adjls=adjls
>         self.juncls=juncls
>        
> self.shortest=find_shortest_path(adjls,self.dest,self.orig)
>         self.calc=findpaths(adjls,self.dest,self.orig)
>        
> self.stats={'currtrsp':0,'avgspeed':0,'distcov':0,'totaltime':0}
>     def traverse_track(self,p1,p2):
>         counter=0
>         time=0
>         while self.adjls[p1][counter].to!=p2:
>             counter=counter+1
>         self.track=self.adjls[p1][counter]
>         self.pos=0
>         if self.speed>self.track.speed:
>             speed=self.track.speed
>         else:
>             speed=self.speed
>         while self.pos!=self.track.length:
>             if self.track.state.has_key(self.pos):
>                 self.track.state[self.pos].acquire()
>             else:
>                
> self.track.state[self.pos]=threading.Semaphore(value=self.track.lanes)
>                 self.track.state[self.pos].acquire()
>             if self.pos!=0:
>                 self.track.state[self.pos-1].release()
>             self.pos=self.pos+1
>             sleep(1.0/speed)
>             time=time+1.0/speed
>        
> self.stats['currtrsp']=float(self.track.length)/time
>         if self.stats['avgspeed']:
>            
> self.stats['avgspeed']=float(self.stats['distcov']+self.track.length)/(self.stats['distcov']/self.stats['avgspeed']+self.track.length/self.stats['currtrsp'])
>         else:
>            
> self.stats['avgspeed']=self.stats['currtrsp']
>        
> self.stats['totaltime']=self.stats['totaltime']+time
>         if self.track.stats['avgspeed']:
>            
> self.track.stats['avgspeed']=(self.track.stats['avgspeed']*self.track.stats['traffictotal']+self.stats['currtrsp'])/(self.track.stats['traffictotal']+1)
>         else:
>            
> self.track.stats['avgspeed']=self.stats['currtrsp']
>        
> self.stats['distcov']=self.stats['distcov']+self.track.length
>        
> self.track.stats['traffictotal']=self.track.stats['traffictotal']+1
>     def cross_junction(self,juncls,juncid,orig,dest):
>         marker=str(orig)+'-'+str(dest)
>         if juncls[juncid].free.has_key(marker):
>             self.track.state[self.pos].release()
>         else:
>             while not
> juncls[juncid].signalled['green'].has_key(marker):
>                 sleep(0.2)
>             self.track.state[self.pos-1].release()
>     def run(self):
>         path=self.shortest
>         counter=1
>         for i in path[:1]:
>             self.traverse_track(i,path[counter])
>             if not counter==len(path)-1:
>                
> self.cross_junction(self.juncls,path[counter],i,path[counter+1])
>             counter=counter+1
>         self.finished=1
>         self.track.state[self.pos-1].release()
> 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


More information about the Tutor mailing list