Per How to generate a repeatable random number sequence?可以设置随机模块的状态,以便您可以期望后续调用randint返回相同的数字。
我看到这种方法的一个限制是状态设置在模块级别(本质上是一个全局变量)所以似乎不可能创建几个可重复的随机数流/迭代器(但是流的调用可以任意交织)与当前机制。是否有任何变通方法/替代库可以实现这一目标?
答案 0 :(得分:8)
它不必在模块级别维护状态 - 请参阅random
module的文档:
该模块提供的函数实际上是a的绑定方法 隐藏
random.Random
类的实例。你可以实例化你的 拥有Random的实例来获取不共享状态的生成器。这个 对于多线程程序特别有用,创建一个不同的程序 每个线程的Random实例,并使用jumpahead()
方法 使得每个线程可能看到生成的序列 不要重叠。
答案 1 :(得分:5)
random.Random()
正是您要找的。 p>
http://hg.python.org/cpython/file/2.7/Lib/random.py#l72
所有random.*
模块级函数都只是位于Random()
的共享random._inst
实例的代理。
http://hg.python.org/cpython/file/2.7/Lib/random.py#l879
根据您的情况,您所做的只是实例化N random.Random()
个实例;它们将具有独立的内部RNG状态,可以播种/消费而不会相互影响。
事实上,我认为最好的做法是为非平凡的应用程序创建自己的Random()
实例,特别是如果存在依赖于状态的错误等,它可以很容易地重复。特别是在测试套件中,这可能是非常宝贵的。