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
Répondre
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.
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.
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. –
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.
- 1. SQL Server Random Sort
- 2. Random WordPress Admin 404s
- 3. Random CSS via JS
- 4. Problème avec Random et Threads dans .NET
- 5. C++ Random Seed, objets globaux et SDL_Threads
- 6. Random in python 2.5 ne fonctionne pas?
- 7. Comment encoder en base64/dev/random ou/dev/urandom?
- 8. Utilisation de boost :: random comme RNG pour std :: random_shuffle
- 9. Random "% 2F" dans la spécification pour vérifier l'existence d'un formulaire de commentaire
- 10. Markup personnalisé dans Django
- 11. requête complexe dans Django
- 12. Commande complexe dans Django
- 13. Unicode appnames dans Django
- 14. Relations dans Django Admin
- 15. Django dans Eclipse
- 16. modèle dans Django
- 17. URLconfs dans Django
- 18. Polymorphisme dans Django
- 19. ManyToManyFields dans Django Admin
- 20. excellent dans django
- 21. OneToMany dans Django-Forms
- 22. Cronjobs dans Django
- 23. Requêtes Multijoin dans Django
- 24. login_required décorateur dans django
- 25. Filtre personnalisé dans Django Admin sur Django 1.3 ou inférieur
- 26. Django, de php à Django
- 27. validation de formulaire dans django
- 28. Comment utiliser CommaSeparatedIntegerField dans django?
- 29. arrondir les décimales dans Django
- 30. Authentification de l'utilisateur dans Django
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 –