random.Random() is what you are looking for.
http://hg.python.org/cpython/file/2.7/Lib/random.py#l72
All the functions of the random.* Module level are simply proxies for a common instance of Random() , which lives in random._inst .
http://hg.python.org/cpython/file/2.7/Lib/random.py#l879
In your situation, all you need to do is an instance of N random.Random() ; they will have independent internal RNG states and can be seeded / consumed without affecting each other.
In fact, I consider it best practice to create our own instances of Random() for non-trivial applications, in particular, so it can be easily made repeatable if there is a state-dependent error, etc. Especially in test cases, this can be invaluable.
source share