Sto provando a generare un uuid per un nome file, e sto anche usando il modulo multiprocessing. Spiacevolmente, tutti i miei uuids finiscono esattamente allo stesso modo. Ecco un piccolo esempio:Il multiprocessing di Python non funziona bene con uuid.uuid4()
import multiprocessing
import uuid
def get_uuid(a):
## Doesn't help to cycle through a bunch.
#for i in xrange(10): uuid.uuid4()
## Doesn't help to reload the module.
#reload(uuid)
## Doesn't help to load it at the last minute.
## (I simultaneously comment out the module-level import).
#import uuid
## uuid1() does work, but it differs only in the first 8 characters and includes identifying information about the computer.
#return uuid.uuid1()
return uuid.uuid4()
def main():
pool = multiprocessing.Pool(20)
uuids = pool.map(get_uuid, range(20))
for id in uuids: print id
if __name__ == '__main__': main()
Ho dato un'occhiata in codice di uuid.py, e sembra a seconda-on-the-piattaforma di utilizzare alcune routine a livello del sistema operativo per casualità, così sto perplesso da un pitone -level soluzione (per fare qualcosa come ricaricare il modulo uuid o scegliere un nuovo seme casuale). Potrei usare uuid.uuid1(), ma solo 8 cifre differiscono e penso che siano derivate esclusivamente dal tempo, il che sembra pericoloso soprattutto dato che io sono multiprocessing (quindi il codice potrebbe essere eseguito esattamente nello stesso momento) . C'è qualche saggezza là fuori su questo problema?
Abbastanza sicuro, impostazione uuid._uuid_generate_random = Nessuno fa la cosa giusta. Deve essere un bug nella libc di Mac OS X uuid_generate_random(). Grazie per il suggerimento di presentare un bug report: http://bugs.python.org/issue8621 – yig
Ho anche presentato un bug di piattaforma contro Mac OS X: http://openradar.appspot.com/radar?id=334401 – yig