具有相同随机种子的不同实现

时间:2011-01-22 13:00:30

标签: python random seed

我有一个包含不同模块的项目。然后我有一个名为Main.py的文件,其中有一些代码在运行期间调用这些模块。在Main.py文件中,我使用:

设置随机种子
random.seed(2)

即使我使用相同的随机种子,我从不同运行获得的输出也不相同。你能告诉我为什么会这样吗?我班中的各种模块都使用random.uniform, random.choice, random.sample个函数。在一个地方,我还定义rnduniform = random.uniform并使用它。

有关如何解决此问题的任何帮助(即,能够通过设置随机种子来复制结果)并帮助我理解这一点将非常感激。

谢谢。

编辑:解决了。我的错误。

抱歉浪费你的时间。我仔细查看了代码,其中一个使用随机数生成的函数在其中一个类的 init 方法中调用。在设置种子之前访问了 init 方法。我试图删除帖子,但我不能。因此,这个编辑。

1 个答案:

答案 0 :(得分:1)

线程安全处理并发编程 - 换句话说,当您通过线程同时执行两个不同的代码路径时。对于作为程序员的单行代码通常是大量单独的操作,不同的线程可能会干扰您正在使用的任何变量,或者使用中间计算。这将导致很难理解错误,因为通常你的代码看起来很完美。

在这种情况下,他说你的代码使用random()和某个线程中的其他代码以某种方式使用随机数生成器可能会发生冲突并且不会按预期运行。例如,数字可能不再是数学上随机的,或者如果您使用某个基本种子进行初始化,然后期望random()在多个调用中返回多个设置值,那么这些数字可能不是您期望的数字被退回。在使用非线程安全函数的最坏情况下,您最终可能会遇到严重的异常和/或崩溃,因为该函数并非设计为同时在多个线程中使用。

另见Wikipedia topic on Thread safety

相关问题