Skip to content Skip to sidebar Skip to footer

Python Multiprocessing With A Single Function

I have a simulation that is currently running, but the ETA is about 40 hours -- I'm trying to speed it up with multi-processing. It essentially iterates over 3 values of one variab

Solution 1:

  • Wrap the data for each iteration up into a tuple.
  • Make a list data of those tuples
  • Write a function f to process one tuple and return one result
  • Create p = multiprocessing.Pool() object.
  • Call results = p.map(f, data)

This will run as many instances of f as your machine has cores in separate processes.

Edit1: Example:

from multiprocessing import Pool

data = [('bla', 1, 3, 7), ('spam', 12, 4, 8), ('eggs', 17, 1, 3)]

deff(t):
    name, a, b, c = t
    return (name, a + b + c)

p = Pool()
results = p.map(f, data)
print results

Edit2:

Multiprocessing should work fine on UNIX-like platforms such as OSX. Only platforms that lack os.fork (mainly MS Windows) need special attention. But even there it still works. See the multiprocessing documentation.

Solution 2:

Use Pool().imap_unordered if ordering is not important. It will return results in a non-blocking fashion.

Solution 3:

Here is one way to run it in parallel threads:

import threading

L_a = []

for L inrange(0,6,2):
    for a inrange(1,100):
        L_a.append((L,a))
        # Add the rest of your objects heredefRunParallelThreads():
    # Create an index list
    indexes = range(0,len(L_a))
    # Create the output list
    output = [Nonefor i in indexes]
    # Create all the parallel threads
    threads = [threading.Thread(target=simulate,args=(output,i)) for i in indexes]
    # Start all the parallel threadsfor thread in threads: thread.start()
    # Wait for all the parallel threads to completefor thread in threads: thread.join()
    # Return the output listreturn output

defsimulate(list,index):
    (L,a) = L_a[index]
    list[index] = (a,L) # Add the rest of your objects here

master_list = RunParallelThreads()

Post a Comment for "Python Multiprocessing With A Single Function"