python - Can I make uuid's more random? -


i have program dispatches messages separate processes. need balance load, not in precise way, same number ok. since every message has uuid field, want uuid value. after tested uuid randomness found not random expexted. have last 1 , first 1 80% difference. unacceptable, want know if there algorithm can make more random.

here test code.

import uuid collections import counter  count = 3000  def b(length):     holder = []     in xrange(count):         holder.append(str(uuid.uuid4())[:length])     return counter(holder)  def num(part_count):     sep = 0xffffffffffffffffffffffffffffffff / part_count     parts = []     in xrange(count): #        str_hex = str(uuid.uuid4())[:4]         num = int(uuid.uuid4().hex,16)         divide = num/sep         if divide == part_count:             divide = part_count - 1         parts.append(divide)     return counter(parts)  if __name__ == "__main__":     print num(200)  

and output this:

counter({127l: 29, 198l: 26, 55l: 25, 178l: 24, 184l: 24, 56l: 23, 132l: 23, 143l: 23, 148l: 23, 195l: 23, 16l: 21, 30l: 21, 44l: 21, 53l: 21, 97l: 21, 158l: 21, 185l: 21, 13l: 20, 146l: 20, 149l: 20, 196l: 20, 2l: 19, 11l: 19, 15l: 19, 19l: 19, 46l: 19, 58l: 19, 64l: 19, 68l: 19, 70l: 19, 89l: 19, 112l: 19, 118l: 19, 128l: 19, 144l: 19, 156l: 19, 192l: 19, 27l: 18, 41l: 18, 42l: 18, 51l: 18, 54l: 18, 85l: 18, 87l: 18, 88l: 18, 93l: 18, 94l: 18, 104l: 18, 106l: 18, 115l: 18, 4l: 17, 22l: 17, 45l: 17, 59l: 17, 79l: 17, 81l: 17, 105l: 17, 125l: 17, 138l: 17, 150l: 17, 159l: 17, 167l: 17, 194l: 17, 3l: 16, 18l: 16, 28l: 16, 31l: 16, 33l: 16, 62l: 16, 65l: 16, 83l: 16, 111l: 16, 123l: 16, 126l: 16, 133l: 16, 145l: 16, 147l: 16, 163l: 16, 166l: 16, 183l: 16, 188l: 16, 190l: 16, 5l: 15, 6l: 15, 9l: 15, 23l: 15, 26l: 15, 34l: 15, 35l: 15, 38l: 15, 69l: 15, 73l: 15, 74l: 15, 77l: 15, 82l: 15, 86l: 15, 107l: 15, 108l: 15, 109l: 15, 110l: 15, 114l: 15, 136l: 15, 141l: 15, 142l: 15, 153l: 15, 160l: 15, 169l: 15, 176l: 15, 180l: 15, 186l: 15, 0l: 14, 1l: 14, 36l: 14, 39l: 14, 43l: 14, 60l: 14, 71l: 14, 72l: 14, 76l: 14, 92l: 14, 113l: 14, 131l: 14, 135l: 14, 157l: 14, 171l: 14, 172l: 14, 181l: 14, 189l: 14, 7l: 13, 17l: 13, 20l: 13, 24l: 13, 25l: 13, 32l: 13, 47l: 13, 49l: 13, 101l: 13, 102l: 13, 117l: 13, 121l: 13, 122l: 13, 124l: 13, 130l: 13, 151l: 13, 152l: 13, 165l: 13, 179l: 13, 14l: 12, 21l: 12, 29l: 12, 50l: 12, 63l: 12, 67l: 12, 80l: 12, 84l: 12, 90l: 12, 91l: 12, 96l: 12, 120l: 12, 129l: 12, 139l: 12, 140l: 12, 182l: 12, 193l: 12, 197l: 12, 52l: 11, 75l: 11, 78l: 11, 103l: 11, 116l: 11, 119l: 11, 134l: 11, 137l: 11, 161l: 11, 173l: 11, 12l: 10, 37l: 10, 66l: 10, 98l: 10, 100l: 10, 162l: 10, 170l: 10, 175l: 10, 177l: 10, 187l: 10, 191l: 10, 199l: 10, 48l: 9, 155l: 9, 164l: 9, 174l: 9, 10l: 8, 95l: 8, 99l: 8, 168l: 8, 8l: 7, 40l: 7, 57l: 7, 61l: 7, 154l: 6}) 

the last 1 6 first 1 29, 5 times difference

uuids not meant random, unique. if balancer needs keyed off of them, should run them through hash function first randomness want:

import hashlib actually_random = hashlib.sha1(uuid).digest() 

Comments

Popular posts from this blog

c++ - Is it possible to compile a VST on linux? -

java - Output of Eclipse is rubbish -

jquery - Confused with JSON data and normal data in Django ajax request -