automatic multiprocessing

2009-07-07 Thread Cheng Soon Ong

Hi all,

I'm trying to automate the use of multiprocessing when it is available. The 
setting I have is quite simple, with a for loop where the operations inside are 
independent of each other. Here's a bit of code. function_inputs is a list of 
dictionaries, each of which match the signature of function_handle.


if multiprocessing_present:
# Passing keyword arguments to map still doesn't work
cpus = multiprocessing.Pool()
function_outputs = cpus.map(function_handle, function_inputs)
else:
function_outputs = []
for kwargs in function_inputs:
cur_out = function_handle(**kwargs)
function_outputs.append(cur_out)

Am I missing something here? I cannot seem to get map to pass on keyword 
arguments.

Thanks in advance,
Cheng Soon
--
http://mail.python.org/mailman/listinfo/python-list


Re: automatic multiprocessing

2009-07-07 Thread Simon Forman
On Jul 7, 11:08 am, Cheng Soon Ong chengsoon@inf.ethz.ch wrote:
 Hi all,

 I'm trying to automate the use of multiprocessing when it is available. The
 setting I have is quite simple, with a for loop where the operations inside 
 are
 independent of each other. Here's a bit of code. function_inputs is a list of
 dictionaries, each of which match the signature of function_handle.

      if multiprocessing_present:
          # Passing keyword arguments to map still doesn't work
          cpus = multiprocessing.Pool()
          function_outputs = cpus.map(function_handle, function_inputs)
      else:
          function_outputs = []
          for kwargs in function_inputs:
              cur_out = function_handle(**kwargs)
              function_outputs.append(cur_out)

 Am I missing something here? I cannot seem to get map to pass on keyword 
 arguments.

 Thanks in advance,
 Cheng Soon

Pool.map() doesn't handle **dict keyword argument notation
automatically.  You could use a wrapper function like so:

cpus = multiprocessing.Pool()
def f(kwargs):
return function_handle(**kwargs)
function_outputs = cpus.map(f, function_inputs)

(Note that f() could be defined outside the if statement if you're
going to use it often.)

HTH,
~Simon
-- 
http://mail.python.org/mailman/listinfo/python-list