Ordering in Multiprocessing

Consider the following script:

import os
from multiprocessing import Pool

def f(name):
    print("Greetings from "+str(name))

ncpus=int(os.getenv('NUM_THREADS'))
pool=Pool(processes=ncpus)
pool.map(f,range(ncpus))
pool.close()
pool.join()

An example of the output run with 8 cores is

Greetings from 0
Greetings from 1
Greetings from 2
Greetings from 4
Greetings from 3
Greetings from 5
Greetings from 7
Greetings from 6

Like other parallel models we have seen, Multiprocessing is not deterministic. Due to some differences in its implementation compared to compiled languages, threads may be more likely to be nearly ordered or even correctly ordered, but it is not guaranteed.

If we wish to enforce ordering, we must return the result and use map to collect the result.

import os
from multiprocessing import Pool

def f(name):
    return "Greetings from "+str(name)

ncpus=int(os.getenv('NUM_THREADS'))
pool=Pool(processes=ncpus)
result=pool.map(f,range(ncpus))
print("\n".join(result))
pool.close()
pool.join()

This time we always get

Greetings from 0
Greetings from 1
Greetings from 2
Greetings from 3
Greetings from 4
Greetings from 5
Greetings from 6
Greetings from 7
Previous
Next
© 2026 The Rector and Visitors of the University of Virginia