Случайный посев в Джанго - PullRequest
4 голосов
/ 21 июля 2009

В представлении в django я использую random.random(). Как часто мне нужно звонить random.seed()? Один раз на каждый запрос? Один раз на каждый сезон? Один раз, когда веб-сервер работает?

Ответы [ 3 ]

3 голосов
/ 21 июля 2009

Звоните random.seed() редко, если вообще.

Чтобы быть случайным, вы должны позволить генератору случайных чисел работать, не касаясь начального числа. Последовательность чисел - это то, что случайно. Если вы меняете семя, вы начинаете новую последовательность. Начальные значения могут быть не очень случайными, что приводит к проблемам.

В зависимости от того, сколько чисел вам нужно, вы можете периодически обнулять начальное значение с /dev/random.

Вы должны попытаться сбросить семя непосредственно перед тем, как вы использовали предыдущее семя. Вы не получаете полных 32 бита случайности, поэтому вы можете сбросить начальное число после генерации 2 ** 28 чисел.

3 голосов
/ 21 июля 2009

Не устанавливайте семя.

Единственный раз, когда вы хотите установить начальное значение, это если вы хотите убедиться, что одни и те же события продолжаются. Например, если вы не хотите, чтобы игроки обманывали вашу игру, вы можете сохранить начальное значение, а затем установить его, когда они загружают свою игру. Тогда независимо от того, сколько раз они сохраняют + перезагружают, это все равно дает те же результаты.

0 голосов
/ 21 июля 2009

Это действительно зависит от того, для чего вам нужно случайное число. Используйте некоторые эксперименты, чтобы выяснить, имеет ли это какое-либо значение. Вы также должны учитывать, что на самом деле существует шаблон для псевдослучайных чисел. Имеет ли для вас значение, если кто-то может угадать следующее случайное число? Если нет, запустите его один раз в начале сеанса или при первом запуске сервера.

Однократный посев в начале сеанса, вероятно, имеет смысл, ИМО. Таким образом, пользователь получит набор псевдослучайных чисел на протяжении всего сеанса. Если вы каждый раз просеиваете страницу, им это не гарантируется.

...