Bir dosya adı için uuid oluşturmaya çalışıyorum ve aynı zamanda çoklu işleme modülünü kullanıyorum. Hoş olmayan bir şekilde, tüm uuids'lerim tamamen aynı. İşte küçük bir örnektir:Python multiprocessing uuid.uuid4 ile güzel oynamıyor()
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()
Ben uuid.py koduna peeked ve bağlı-platform üzerinde rasgelelikten bazı OS düzeyinde rutinleri kullanmak gibi görünüyor, bu yüzden bir piton olarak stumped -level çözüm (uuid modülünü yeniden yüklemek veya yeni bir rasgele tohum seçmek gibi bir şey yapmak için). Ben uuid.uuid1() kullanabilirim, ancak sadece 8 basamaklı farklıdır ve bence, özellikle de çok işlemcili (kodun tam olarak aynı anda yürütülmesi) göz önüne alındığında, tehlikeli görünen gibi görünüyor . Bu konuda biraz bilgelik var mı?
Tabii ki, uuid._uuid_generate_random ayarı = Hiçbiri doğru olanı yapmaz. Mac OS X'in libc uuid_generate_random() dosyasında bir hata olmalı. Bir hata raporu dosyalama önerisi için teşekkürler: http://bugs.python.org/issue8621 – yig
Ayrıca Mac OS X'e karşı bir platform hatası yazdım: http://openradar.appspot.com/radar?id=334401 – yig