2011-01-22 107 views
0

我有一个包含不同模块的项目。然后我有一个名为Main.py的文件,它有一些在运行过程中调用这些模块的代码。在文件Main.py我设置使用随机种子:具有相同随机种子的不同实现

random.seed(2) 

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

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

谢谢。

编辑:解决。我的错误。

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

+0

一些代码会有所帮助。 – marcog 2011-01-22 13:04:06

回答

1

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

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

另请参阅Wikipedia topic on Thread safety

相关问题