[Python-Dev] Sporadic test failures in Lib/test/test_mimetools.py (original) (raw)
Guido van Rossum guido@python.org
Fri, 13 Jun 2003 13:01:26 -0400
- Previous message: [Python-Dev] Sporadic test failures in Lib/test/test_mimetools.py
- Next message: [Python-Dev] Sporadic test failures in Lib/test/test_mimetools.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
chooseboundary() ends likes so:
timestamp = '%.3f' % time.time() seed =
random.randint(0, 32767)
return prefix + '.' + timestamp + '.' + seed On Windows, time.time() updates fewer than 100 times per second (but more than 10), so the timestamp format is overly optimistic about how much unique info it can get out of time.time(). The test in question calls chooseboundary() 100 times as fast as it can, and on Windows probably no more than two distinct time.time() values are seen for the duration. The chance of a boundary string duplicate is then about the chance of seeing a duplicate from the randint() in 100 tries, which is non-trivial. So there are more-or-less obvious flaws in this algorithm, but I don't think there exist any simple methods to generate a guid that's truly gu. Using a threadsafe counter instead of randomization would at least be unique across a program run.
A simple fix would be to change the seed to use 31 instead of 15 bits; we now have a random generator capable of that. Perhaps we should go ahead and use even more bits... Aren't we using mersenne Twister by default?
--Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-Dev] Sporadic test failures in Lib/test/test_mimetools.py
- Next message: [Python-Dev] Sporadic test failures in Lib/test/test_mimetools.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]