@@ -60,6 +60,7 @@ def __init__(self, options):
6060 self .process_groups = {}
6161 self .ticks = {}
6262 self .process_queue = deque ()
63+ self .waiting_to_be_spawned = set ()
6364
6465 def main (self ):
6566 if not self .options .first :
@@ -274,18 +275,28 @@ def runforever(self):
274275 # spawn if all dependencies are running or process has no dependencies
275276 if self .process_queue [- 1 ].config .depends_on is not None :
276277 if all ([dependee .get_state () == ProcessStates .RUNNING for dependee in self .process_queue [- 1 ].config .depends_on .values ()]):
277- self .process_queue .pop ().spawn (self )
278+ ready_process = self .process_queue .pop ()
279+ ready_process .spawn (self )
280+ try :
281+ self .waiting_to_be_spawned .remove (ready_process .config .name )
282+ except KeyError :
283+ pass
278284 # add any dependee which is not RUNNING or STARTING to queue
279285 else :
280286 for dependee in self .process_queue [- 1 ].config .depends_on .values ():
281- #print('dependee is: ', dependee, dependee.state, dependee.state == ProcessStates.STOPPED)
282287 if dependee .state is not (ProcessStates .STARTING or ProcessStates .RUNNING ):
283288 # Should we check if the process is already in the queue?
284- self .process_queue .append (dependee )
289+ if dependee .config .name not in self .waiting_to_be_spawned :
290+ self .process_queue .append (dependee )
291+ self .waiting_to_be_spawned .add (dependee .config .name )
285292
286293 else :
287- print ('spawning something with no dependency!' )
288- self .process_queue .pop ().spawn (self )
294+ ready_process = self .process_queue .pop ()
295+ ready_process .spawn (self )
296+ try :
297+ self .waiting_to_be_spawned .remove (ready_process .config .name )
298+ except KeyError :
299+ pass
289300
290301 self .reap ()
291302 self .handle_signal ()
0 commit comments