Django中的随机数初始化

4 投票
3 回答
2739 浏览
提问于 2025-04-15 13:02

在Django的视图中,我使用了random.random()这个函数。那么我需要多频繁地调用一下random.seed()呢?

是每次请求的时候调用一次吗?

还是每个季节调用一次?

还是在网络服务器运行的时候只需要调用一次就行?

3 个回答

0

这其实要看你需要随机数做什么。你可以试着实验一下,看看这样做是否有区别。你还应该考虑到,伪随机数其实是有一定规律的。如果有人能猜到下一个随机数,这对你来说重要吗?如果不重要的话,可以在会话开始时或者服务器启动时只设置一次种子。

我觉得在会话开始时只设置一次种子是最合理的。这样用户在整个会话中会得到一组伪随机数。如果你每次页面加载时都设置种子,他们就不能保证得到这一组随机数了。

4

不要设置种子。

只有在你想确保相同的事件一直发生时,才需要设置种子。比如说,如果你不想让玩家在游戏中作弊,你可以保存这个种子,然后在他们加载游戏时再设置它。这样无论他们保存和重新加载多少次,结果都会是一样的。

3

尽量少调用 random.seed(),如果可以的话就不要调用。

要让数字看起来随机,你必须让随机数生成器自由运行,而不去碰种子(seed)。生成的数字序列才是真正的随机。如果你改变了种子,就会开始一个新的数字序列。而且,种子的值可能并不那么随机,这样会导致一些问题。

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

你应该在用完之前的种子之前尝试重置种子。因为你并不能获得完整的32位随机性,所以在生成了大约2的28次方(即268,435,456)个数字后,你可能想要重置种子。

撰写回答