在Django中进行随机种子生成

4
在Django的视图中,我使用random.random()。我需要多久调用一次random.seed()
每个请求调用一次? 每个季节调用一次? 在Web服务器运行时调用一次?

与https://dev59.com/gnVC5IYBdhLWcg3wtzqs,https://dev59.com/4nNA5IYBdhLWcg3wC5Xh,https://dev59.com/JUfSa4cB1Zd3GeqPBfNl相关。 - S.Lott
3个回答

4

不要设置种子。

只有在想确保相同的事件一直发生时,才需要设置种子。例如,如果您不希望玩家在游戏中作弊,可以保存种子,然后在他们加载游戏时设置它。然后,无论他们保存和重新加载多少次,都会得到相同的结果。


3

尽可能少地调用random.seed()

为了保持随机性,必须允许随机数生成器在不触及种子的情况下运行。数字序列是随机的。如果更改种子,则会启动新的序列。种子值可能不太随机,导致问题。

根据您需要的数字数量,可以考虑定期从/dev/random重置种子。

应该在使用完先前的种子之前尝试重置种子。您无法获得完整的32位随机性,因此您可能需要在生成2 ** 28个数字后重置种子。


0

这真的取决于你需要随机数的用途。通过一些实验来找出是否有任何差异。你还应该考虑到伪随机数实际上是有模式的。如果有人可以猜测下一个随机数,对你是否有影响?如果没有,那么在会话开始时或服务器首次启动时进行一次种子播种。

在会话开始时进行一次种子播种可能是最合理的选择,在用户会话期间他们将获得一组伪随机数。如果每次提供页面时都进行播种,则不能保证这一点。


1
不要浪费太多时间进行试验。更改种子会引入偏差。如果你真的很幸运,你的种子在你关心的几十个测试中看起来是随机的。除非你有什么神奇的东西,否则随意设置种子不会特别随机。 - S.Lott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接