[Tutor] multithreading random()

John Fouhy john at fouhy.net
Tue Oct 10 06:57:00 CEST 2006


On 10/10/06, Dick Moores <rdm at rcblue.com> wrote:
> Please refer to
> <http://www.python.org/doc/current/lib/module-random.html>, from which I quote:
>
> "The functions supplied by this module are actually bound methods of
> a hidden instance of the random.Random class. You can instantiate
> your own instances of Random to get generators that don't share
> state. This is especially useful for multi-threaded programs,
> creating a different instance of Random for each thread, and using
> the jumpahead() method to make it likely that the generated sequences
> seen by each thread don't overlap."
>
> Could someone point me to an example script where this was done? I'd
> very much like to learn how to do that.

Using google's code search, I found this:

    def _create_random_generators(self, num, delta, firstseed=None):
        """Return list of 'num' distinct generators.
        Each generator has its own unique segment of delta elements
        from Random.random()'s full period.
        Seed the first generator with optional arg firstseed (default
        is None, to seed from current time).
        """
        g = Random(firstseed)
        result = [g]
        for i in range(num - 1):
            laststate = g.getstate()
            g = Random()
            g.setstate(laststate)
            g.jumpahead(delta)
            result.append(g)
        return result

Although, from looking at the docs you quoted, this may not be correct
for python2.3+.

-- 
John.


More information about the Tutor mailing list