web-dev-qa-db-fra.com

Python: graine temporelle du système aléatoire

En python, et en supposant que je suis sur un système qui a un générateur de graines aléatoire, comment puis-je obtenir random.seed () pour utiliser l'heure système à la place? (Comme si/dev/urandom n'existait pas)

26
Academiphile
import random
from datetime import datetime
random.seed(datetime.now())
42
Quint

tu peux faire

import random
import time
random.seed(time.time())
13
Elisha

Connaissez-vous cette bibliothèque: PyRandLib? Voir:

https://schmouk.github.io/PyRandLib/ to easily download archives versions, and
https://github.com/schmouk/PyRandLib to get access to the code.

Cette bibliothèque contient plusieurs des meilleurs générateurs de nombres pseudo-aléatoires de sa catégorie tout en agissant exactement comme la bibliothèque Python "intégrée" aléatoire (il suffit de décompresser ou de décompresser le fichier téléchargé) archive dans le sous-répertoire 'Lib/site-packages /' de votre Python).

À partir du code et du module 'fastrand32.py', vous obtiendrez un moyen bien plus sophistiqué d'alimenter au hasard avec une version mélangée de l'heure actuelle. Pour vous, cela deviendrait:

import time
import random

t = int( time.time() * 1000.0 )
random.seed( ((t & 0xff000000) >> 24) +
             ((t & 0x00ff0000) >>  8) +
             ((t & 0x0000ff00) <<  8) +
             ((t & 0x000000ff) << 24)   )

Cela fournit un avantage principal: pendant de très courtes périodes, les graines initiales pour alimenter le générateur pseudo-aléatoire seront extrêmement différentes entre deux appels successifs.

2
Schmouk