Python Language

Multiprocessing

Running Two Simple Processes

A simple example of using multiple processes would be two processes (workers) that are executed separately. In the following example, two processes are started:

  • countUp() counts 1 up, every second.

  • countDown() counts 1 down, every second.

    import multiprocessing import time from random import randint

    def countUp(): i = 0 while i <= 3: print(‘Up:\t{}‘.format(i)) time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds i += 1

    def countDown(): i = 3 while i >= 0: print(‘Down:\t{}‘.format(i)) time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds i -= 1

    if name == ’main’: # Initiate the workers. workerUp = multiprocessing.Process(target=countUp) workerDown = multiprocessing.Process(target=countDown)

      # Start the workers.
      workerUp.start()
      workerDown.start()
    
      # Join the workers. This will block in the main (parent) process
      # until the workers are complete.
      workerUp.join()
      workerDown.join()

The output is as follows:

Up:    0
Down:    3
Up:    1
Up:    2
Down:    2
Up:    3
Down:    1
Down:    0

Using Pool and Map

from multiprocessing import Pool

def cube(x):
    return x ** 3

if __name__ == "__main__":
    pool = Pool(5)
    result = pool.map(cube, [0, 1, 2, 3])

Pool is a class which manages multiple Workers (processes) behind the scenes and lets you, the programmer, use.

Pool(5) creates a new Pool with 5 processes, and pool.map works just like map but it uses multiple processes (the amount defined when creating the pool).

Similar results can be achieved using map_async, apply and apply_async which can be found in the documentation.


This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow