Hi guys, I’m asking a question about using multipleprocessing module to print random numbers.
When I was using the “numpy.random.rand” produce random numbers, I found that some of the produced values from different cores are the same. But the random.uniform can work just ok.
Here is the code.
import numpy as np
# print (random.uniform(0, 1))
num_data = 8
cores = 8
pool = multiprocessing.Pool(processes=cores)
print_random = pool.map(print_map, np.arange(num_data))
The “random” module produces
But the “numpy” module produces
I really want to know how this could happen.
Thanks a lot !
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
Thanks ! In your way the “numpy” module can produce different numbers.
But I still couldn’t find where the random number generator was duplicated. Actually the data I produced several days ago using “numpy” seemed to have no such problems.
I don’t know if this has a relationship with the recent update of my Ubuntu. T_T
I can only guess that maybe a recent update of numpy changed the handling of the random state when running multiprocess stuff.
Yeah! That really helps a lot! Thank you very much!!
If we use random rather than np.random, everything will be ok without setting seeds every multi-process?
I think so. You can have a try like this:
The main reason is resulted from the fact that no seed is input to the
numpy.random.seed(). Providing a seed for each process can also be a solution.