@@ -154,7 +154,6 @@ def __init__(self, pool_size=5, queues=[], server='localhost:6379', password=Non
154154 self ._workers = OrderedDict ()
155155 self .server = server
156156 self .password = password
157-
158157 #self._workers = list()
159158
160159 def setup_resq (self ):
@@ -196,15 +195,12 @@ def add_child(self, signum, frame):
196195 def register_khan (self ):
197196 if not hasattr (self , 'resq' ):
198197 self .setup_resq ()
199-
200198 self .resq .redis .sadd ('resque:khans' ,str (self ))
201199 self .started = datetime .datetime .now ()
202200
203201 def _check_commands (self ):
204202 if not self ._shutdown :
205203 logging .debug ('Checking commands' )
206- command_key = 'resque:khan:%s' % self
207-
208204 command = self .resq .redis .lpop ('resque:khan:%s' % str (self ))
209205 logging .debug ('COMMAND FOUND: %s ' % command )
210206 if command :
@@ -223,15 +219,17 @@ def process_command(self, command):
223219
224220 def add_minion (self ):
225221 m = self ._add_minion ()
226- m .start ()
222+ self .resq .redis .srem ('resque:khans' ,str (self ))
223+ self .pool_size += 1
224+ self .resq .redis .sadd ('resque:khans' ,str (self ))
227225
228226 def _add_minion (self ):
229227 logging .info ('Adding minion' )
230- #parent_conn, child_conn = multiprocessing.Pipe()
231228 m = Minion (self .queues , self .server , self .password )
232- #m.start()
229+ m .start ()
230+ self ._workers [m .pid ] = m
231+ logging .info ('minion added at: %s' % m .pid )
233232 return m
234- #self._workers.append(m)
235233
236234 def _shutdown_minions (self ):
237235 """
@@ -246,20 +244,23 @@ def _remove_minion(self, pid=None):
246244 # m = self._workers.pop(pid)
247245 pid , m = self ._workers .popitem (False )
248246 m .terminate ()
247+ self .resq .redis .srem ('resque:khans' ,str (self ))
248+ self .pool_size -= 1
249+ self .resq .redis .sadd ('resque:khans' ,str (self ))
249250 return m
250251
251252 def unregister_khan (self ):
252253 logging .debug ('unregistering khan' )
253254 self .resq .redis .srem ('resque:khans' ,str (self ))
254255 self .started = None
255256
257+ def setup_minions (self ):
258+ for i in range (self .pool_size ):
259+ self ._add_minion ()
260+
256261 def work (self , interval = 2 ):
257262 self .startup ()
258- for i in range (self .pool_size ):
259- m = self ._add_minion ()
260- m .start ()
261- self ._workers [m .pid ] = m
262- logging .info ('minion added at %s' % m .pid )
263+ self .setup_minions ()
263264 self .setup_resq ()
264265 self .register_khan ()
265266 while True :
@@ -275,7 +276,7 @@ def work(self, interval=2):
275276
276277 def __str__ (self ):
277278 hostname = os .uname ()[1 ]
278- return '%s:%s' % (hostname , self .pid )
279+ return '%s:%s:%s ' % (hostname , self .pid , self . pool_size )
279280
280281 @classmethod
281282 def run (cls , pool_size = 5 , queues = [], server = 'localhost:6379' ):
0 commit comments