Author: bugman Date: Wed Mar 21 11:06:41 2012 New Revision: 15587 URL: http://svn.gna.org/viewcvs/relax?rev=15587&view=rev Log: Clean up of the Multi_processor.run_command_queue() method. Modified: 1.3/multi/multi_processor_base.py Modified: 1.3/multi/multi_processor_base.py URL: http://svn.gna.org/viewcvs/relax/1.3/multi/multi_processor_base.py?rev=15587&r1=15586&r2=15587&view=diff ============================================================================== --- 1.3/multi/multi_processor_base.py (original) +++ 1.3/multi/multi_processor_base.py Wed Mar 21 11:06:41 2012 @@ -243,48 +243,55 @@ #TODO: move up a level add virtaul send and revieve functions def run_command_queue(self, queue): - self.assert_on_master() - - running_set = set() - idle_set = set([i for i in range(1, self.processor_size()+1)]) - - if self.threaded_result_processing: - result_queue = Threaded_result_queue(self) - else: - result_queue = Immediate_result_queue(self) - - while len(queue) != 0: - - while len(idle_set) != 0: - if len(queue) != 0: - command = queue.pop() - dest = idle_set.pop() - self.master_queue_command(command=command, dest=dest) - running_set.add(dest) - else: - break - - # Loop until the queue of calculations is depleted. - while len(running_set) != 0: - # Get the result. - result = self.master_recieve_result() - - # Debugging print out. - if verbosity.level(): - print('\nIdle set: %s' % idle_set) - print('Running set: %s' % running_set) - - # Shift the processor rank to the idle set. - if result.completed: - idle_set.add(result.rank) - running_set.remove(result.rank) - - # Add to the result queue for instant or threaded processing. - result_queue.put(result) - - # Process the threaded results. - if self.threaded_result_processing: - result_queue.run_all() + """Process all commands on the queue and wait for completion. + + @param queue: The command queue. + @type queue: list of Command instances + """ + + # This must only be run on the master processor. + self.assert_on_master() + + running_set = set() + idle_set = set([i for i in range(1, self.processor_size()+1)]) + + if self.threaded_result_processing: + result_queue = Threaded_result_queue(self) + else: + result_queue = Immediate_result_queue(self) + + while len(queue) != 0: + + while len(idle_set) != 0: + if len(queue) != 0: + command = queue.pop() + dest = idle_set.pop() + self.master_queue_command(command=command, dest=dest) + running_set.add(dest) + else: + break + + # Loop until the queue of calculations is depleted. + while len(running_set) != 0: + # Get the result. + result = self.master_recieve_result() + + # Debugging print out. + if verbosity.level(): + print('\nIdle set: %s' % idle_set) + print('Running set: %s' % running_set) + + # Shift the processor rank to the idle set. + if result.completed: + idle_set.add(result.rank) + running_set.remove(result.rank) + + # Add to the result queue for instant or threaded processing. + result_queue.put(result) + + # Process the threaded results. + if self.threaded_result_processing: + result_queue.run_all() #TODO: move up a level