@@ -252,13 +252,17 @@ def run(self, graph, config, updatehash=False):
252
252
if toappend :
253
253
self .pending_tasks .extend (toappend )
254
254
num_jobs = len (self .pending_tasks )
255
+ logger .debug ('Number of pending tasks: %d' % num_jobs )
255
256
if num_jobs < self .max_jobs :
256
257
if np .isinf (self .max_jobs ):
257
258
slots = None
258
259
else :
259
- slots = self .max_jobs - num_jobs
260
+ slots = max (0 , self .max_jobs - num_jobs )
261
+ logger .debug ('Slots available: %s' % slots )
260
262
self ._send_procs_to_workers (updatehash = updatehash ,
261
263
slots = slots , graph = graph )
264
+ else :
265
+ logger .debug ('Not submitting' )
262
266
sleep (2 )
263
267
self ._remove_node_dirs ()
264
268
report_nodes_not_run (notrun )
@@ -327,9 +331,12 @@ def _send_procs_to_workers(self, updatehash=False, slots=None, graph=None):
327
331
# Check to see if a job is available
328
332
jobids = np .flatnonzero ((self .proc_done == False ) &
329
333
(self .depidx .sum (axis = 0 ) == 0 ).__array__ ())
334
+ num_jobs = len (self .pending_tasks )
335
+ if num_jobs >= self .max_jobs :
336
+ break
330
337
if len (jobids ) > 0 :
331
338
# send all available jobs
332
- logger .info ('Submitting %d jobs' % len (jobids ))
339
+ logger .info ('Submitting %d jobs' % len (jobids [: slots ] ))
333
340
for jobid in jobids [:slots ]:
334
341
if isinstance (self .procs [jobid ], MapNode ):
335
342
try :
@@ -339,6 +346,8 @@ def _send_procs_to_workers(self, updatehash=False, slots=None, graph=None):
339
346
self .proc_pending [jobid ] = False
340
347
continue
341
348
if num_subnodes > 1 :
349
+ if num_subnodes > (self .max_jobs - len (self .pending_tasks )):
350
+ break
342
351
submit = self ._submit_mapnode (jobid )
343
352
if not submit :
344
353
continue
0 commit comments