I think you’ll need to re-seed the random number generator using numpy.random.seed in your do_calculation
function.
My guess is that the random number generator (RNG) gets seeded when you import the module. Then, when you use multiprocessing, you fork the current process with the RNG already seeded — Thus, all your processes are sharing the same seed value for the RNG and so they’ll generate the same sequences of numbers.
e.g.:
def do_calculation(data):
np.random.seed()
rand=np.random.randint(10)
print data, rand
return data * 2