Why does "numpy.random.rand " produce the same values in different cores?

Presumably numpy duplicates its random number generator once per process, if so then each process uses the same random seed. At a guess the fourth result is different because that thread’s setup stage was delayed.

If you really want different random numbers every time, you could call numpy.random.seed(random.randint(some_large_integer)) in print_map