yig*_*yig 6 python random time uuid multiprocessing
我正在尝试为文件名生成一个uuid,我也在使用多处理模块.令人不快的是,我所有的uuids都完全一样.这是一个小例子:
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()
Run Code Online (Sandbox Code Playgroud)
我偷看了uuid.py的代码,看起来依赖于平台使用一些操作系统级别的例程来实现随机性,所以我对一个python级别的解决方案感到困惑(做一些像重新加载uuid模块或选择一个新的随机种子).我可以使用uuid.uuid1(),但只有8位数字不同,我认为只有时间来源,这似乎很危险,特别是考虑到我是多处理(所以代码可以在完全相同的时间执行).关于这个问题,有没有一些智慧?
如果您需要这样做,这是生成您自己的uuid4的正确方法:
import os, uuid
return uuid.UUID(bytes=os.urandom(16), version=4)
Run Code Online (Sandbox Code Playgroud)
Python应该自动执行此操作 - 当本机_uuid_generate_random不存在时,此代码就在uuid.uuid4之外.您的平台的_uuid_generate_random必定有问题.
如果你必须这样做,不要自己解决它,让你平台上的其他人受苦; 报告错误.
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |