0

我有一个包含不同模块的项目。然后我有一个名为 Main.py 的文件,其中包含一些在运行期间调用这些模块的代码。在文件 Main.py 中,我使用以下方法设置随机种子:

random.seed(2)

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

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

谢谢你。

编辑:解决。我的错误。

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

4

1 回答 1

1

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

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

另请参阅有关线程安全的 Wikipedia 主题

于 2011-01-22T15:09:49.943 回答