Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiprocessing a function with several inputs

In Python the multiprocessing module can be used to run a function over a range of values in parallel. For example, this produces a list of the first 100000 evaluations of f.

def f(i):     return i * i  def main():     import multiprocessing     pool = multiprocessing.Pool(2)     ans = pool.map(f, range(100000))      return ans 

Can a similar thing be done when f takes multiple inputs but only one variable is varied? For example, how would you parallelize this:

def f(i, n):     return i * i + 2*n  def main():     ans = []     for i in range(100000):         ans.append(f(i, 20))      return ans 
like image 434
Mark Bell Avatar asked Dec 16 '10 16:12

Mark Bell


People also ask

How do you pass multiple arguments in multiprocessing in Python?

Passing Keyword Arguments to Multiprocessing Processes We can also pass in arguments corresponding to the parameter name using the kwargs parameter in the Process class. Instead of passing a tuple, we pass a dictionary to kwargs where we specify the argument name and the variable being passed in as that argument.

When would you use a multiprocessing pool?

Python multiprocessing Pool can be used for parallel execution of a function across multiple input values, distributing the input data across processes (data parallelism).

What is multiprocessing Freeze_support?

multiprocessing. freeze_support() This function will allow a frozen program to create and start new processes via the multiprocessing. Process class when the program is frozen for distribution on Windows.


1 Answers

You can use functools.partial()

def f(i, n):     return i * i + 2*n  def main():     import multiprocessing     pool = multiprocessing.Pool(2)     ans = pool.map(functools.partial(f, n=20), range(100000))      return ans 
like image 125
mouad Avatar answered Sep 20 '22 18:09

mouad