[Python-checkins] CVS: python/dist/src/Doc/lib librandom.tex,1.19,1.20

Tim Peters tim_one@users.sourceforge.net
Wed, 24 Jan 2001 22:23:20 -0800


Update of /cvsroot/python/python/dist/src/Doc/lib
In directory usw-pr-cvs1:/tmp/cvs-serv11428/python/dist/src/Doc/lib

Modified Files:
	librandom.tex 
Log Message:
Fix bugs introduced by rewrite (in particular, time-based initialization
got broken).  Also added new method .jumpahead(N).  This finally gives us
a semi-decent answer to how Python's RNGs can be used safely and efficiently
in multithreaded programs (although it requires the user to use the new
machinery!).


Index: librandom.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/librandom.tex,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -r1.19 -r1.20
*** librandom.tex	2001/01/25 03:36:25	1.19
--- librandom.tex	2001/01/25 06:23:18	1.20
***************
*** 34,45 ****
  
  The functions supplied by this module are actually bound methods of a
! hidden instance of the \var{random.Random} class.  You can instantiate
! your own instances of \var{Random} to get generators that don't share state.
! This may be especially useful for multi-threaded programs, although there's
! no simple way to seed the distinct generators to ensure that the generated
! sequences won't overlap.  Class \var{Random} can also be subclassed if you
! want to use a different basic generator of your own devising:  in that
! case, override the \method{random()}, \method{seed()}, \method{getstate()}
! and \method{setstate()} methods.
  
  
--- 34,46 ----
  
  The functions supplied by this module are actually bound methods of a
! hidden instance of the \var{random.Random} class.  You can instantiate your
! own instances of \var{Random} to get generators that don't share state.
! This is especially useful for multi-threaded programs, creating a different
! instance of \var{Random} for each thread, and using the \method{jumpahead()}
! method to ensure that the generated sequences seen by each thread don't
! overlap.  Class \var{Random} can also be subclassed if you want to use a
! different basic generator of your own devising:  in that case, override the
! \method{random()}, \method{seed()}, \method{getstate()},
! \method{setstate()} and \method{jumpahead()} methods.
  
  
***************
*** 69,72 ****
--- 70,83 ----
   \end{funcdesc}
  
+ \begin{funcdesc}{jumpahead}{n}
+   Change the internal state to what it would be if \code{random()} were
+   called n times, but do so quickly.  \var{n} is a non-negative integer.
+   This is most useful in multi-threaded programs, in conjuction with
+   multiple instances of the \var{Random} class:  \method{setstate()} or
+   \method{seed()} can be used to force all instances into the same
+   internal state, and then \method{jumpahead()} can be used to force the
+   instances' states as far apart as you like (up to the period of the
+   generator).
+  \end{funcdesc}
  
  Functions for integers: