2009-07-20 10 views
4

Dans une vue dans django j'utilise random.random(). À quelle fréquence dois-je appeler le random.seed()? Une fois pour chaque demande? Une fois par saison? Une fois pendant que le serveur Web est en cours d'exécution?Seeding random dans django

+0

En relation avec http://stackoverflow.com/questions/203382/do-stateless-random-number-generators-exist, http://stackoverflow.com/questions/1108780/why-do-i-always-get -la-même-séquence-de-nombres-aléatoires-avec-rand, http://stackoverflow.com/questions/976993/issues-with-seeding-a-pseudo-random-number-generator-more-than-once –

Répondre

3

Appelez random.seed() rarement ou pas du tout.

Pour être aléatoire, vous devez permettre au générateur de nombres aléatoires de fonctionner sans toucher la graine. La séquence des nombres est ce qui est aléatoire. Si vous changez la graine, vous commencez une nouvelle séquence. Les valeurs de la graine peuvent ne pas être très aléatoires, ce qui entraîne des problèmes.

Selon le nombre de numéros dont vous avez besoin, vous pouvez envisager de réinitialiser la graine de /dev/random périodiquement.

Vous devriez essayer de réinitialiser la graine juste avant d'avoir épuisé la graine précédente. Vous n'obtenez pas les 32 bits de l'aléatoire, vous pouvez donc vouloir réinitialiser la graine après avoir généré 2 ** 28 numéros.

0

Cela dépend vraiment de ce dont vous avez besoin pour le nombre aléatoire. Utilisez des expérimentations pour savoir si cela fait une différence. Vous devriez également considérer qu'il existe réellement un modèle de nombres pseudo-aléatoires. Est-ce que cela fait une différence pour vous si quelqu'un peut deviner le prochain nombre aléatoire? Si ce n'est pas le cas, lancez-le une fois au début d'une session ou au démarrage initial du serveur. L'ensemencement une fois au début de la session serait probablement le plus logique, l'OMI. De cette façon, l'utilisateur recevra un ensemble de nombres pseudo-aléatoires tout au long de sa session. Si vous semez chaque fois qu'une page est servie, ils ne sont pas garantis.

+1

Ne perdez pas beaucoup de temps à expérimenter. Changer la graine introduit un biais. Si vous êtes vraiment chanceux, vos graines sembleront être aléatoires pour les quelques dizaines de tests que vous souhaitez exécuter. Sauf si vous avez quelque chose de magique, mettre des graines au hasard ne sera pas terriblement aléatoire. –

3

Ne pas régler la graine.

La seule fois où vous voulez définir la graine est si vous voulez vous assurer que les mêmes événements continuent à se produire. Par exemple, si vous ne voulez pas que les joueurs trichent dans votre jeu, vous pouvez enregistrer la graine, puis la définir quand ils chargent leur partie. Ensuite, peu importe combien de fois ils économisent + recharger, cela donne toujours les mêmes résultats.