Pergunta

Em uma exibição no Django random.random() eu uso. Quantas vezes eu tenho que random.seed() chamada? Um tempo para cada pedido? Um tempo para cada estação? Uma vez, enquanto o servidor está em execução?

Foi útil?

Solução

Chamada random.seed() raramente se em tudo.

Para ser aleatório, você deve permitir que o gerador de números aleatórios para correr sem tocar a semente. A sequência de números é o que é aleatória. Se você alterar a semente, você iniciar uma nova sequência. Os valores de semente não pode ser muito aleatório, levando a problemas.

Dependendo de quantos números que você precisa, você pode considerar redefinir a semente da /dev/random periodicamente.

Você deve tentar repor a semente antes de você já usou-se a semente anterior. Você não ganha o total de 32 bits de aleatoriedade, assim você pode querer redefinir a semente depois de gerar 2 ** 28 números.

Outras dicas

Não defina a semente.

A única vez que você deseja definir a semente é se você quiser ter certeza de que os mesmos eventos continuam acontecendo. Por exemplo, se você não quer deixar os jogadores batota em seu jogo você pode salvar a semente, e, em seguida, configurá-lo quando carregar seu jogo. Então, não importa quantas vezes eles economizam + recarga, ele ainda dá os mesmos resultados.

É realmente depende do que você precisa do número aleatório para. Use um pouco de experimentação para descobrir se ele faz alguma diferença. Você também deve considerar que há realmente um padrão de números pseudo-aleatórios. Faz alguma diferença para você se alguém pode possível adivinhar o próximo número aleatório? Se não, semente de uma vez, no início de uma sessão ou quando o servidor arranca pela primeira vez.

Semeando uma vez no início da sessão provavelmente faria mais sentido, IMO. Desta forma, o usuário receberá um conjunto de números pseudo-aleatórios ao longo da sua sessão. Se você semear cada vez que uma página é servido, eles não são garantidas isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top