else: # Refresh the experiment logger.debug("Found manager for experiment %s" % experiment.id) managers[experiment.id].experiment = experiment # Check every one of them logger.debug("Checking experiment managers. There are %d of them. pid: %d" % (len(managers), os.getpid())) managers_to_delete = [] for exp_id, manager in managers.items(): # Refresh the experiment first manager.refresh_experiment() # Manager experiment is gone, we dont need it anymore if not manager.experiment: managers_to_delete.append(exp_id) elif manager.finished(): logger.debug('Manager for experiment id: %s is done' % exp_id) managers_to_delete.append(exp_id) else: logger.debug('Commission simulations as needed for experiment id: %s' % exp_id) n_commissioned_sims = manager.commission_simulations() logger.debug('Experiment done (re)commissioning %d simulation(s)' % n_commissioned_sims) # Delete the managers that needs to be deleted for exp_id in managers_to_delete: del managers[exp_id] # No more active managers -> Exit if our analyzer threads are done # Do not use len() to not block anything if not managers: break
'''Signal the run() to shutdown before joining''' self.alive.clear() super(MD5Cracker, self).join(timeout) # Graceful clean up def cleanup(): for worker in workers: worker.join() atexit.register(cleanup) # init vars workers = [] work_queue = Manager().Queue() global_namespace = Manager().Namespace() global_namespace.finished = False global_namespace.count = 0 # Set up Processes number_of_processes = 16 for i in range(number_of_processes): worker = MD5Cracker(work_queue, global_namespace) worker.start() workers.append(worker) print "Target Hash: {}".format(hash) maxChars = 13 while_count = 1 for baseWidth in range(1, maxChars + 1):