automatic multiprocessing

Simon Forman sajmikins at gmail.com
Tue Jul 7 12:16:18 EDT 2009


On Jul 7, 11:08 am, Cheng Soon Ong <chengsoon.... at 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



More information about the Python-list mailing list