【发布时间】:2016-12-11 16:54:43
【问题描述】:
我需要获取 python 用来复制 失败 单元测试的随机哈希种子。
如果PYTHONHASHSEED 设置为非零整数,sys.flags.hash_randomization 会可靠地提供它:
$ export PYTHONHASHSEED=12345
$ python3 -c 'import sys, os;print(sys.flags.hash_randomization, os.environ.get("PYTHONHASHSEED"))'
12345 12345
但是,如果散列是随机的,它只说明 使用了种子,而不是:
$ export PYTHONHASHSEED=random
$ python3 -c 'import sys, os;print(sys.flags.hash_randomization, os.environ.get("PYTHONHASHSEED"))'
1 random
sys.hash_info 中的信息从不包含取决于种子的数据。使用hash function since python3.4,尝试从给定的哈希重建种子似乎也不可行。
上下文:在微调算法时,我们已经看到了依赖于 set/dict 迭代顺序的 heisenbugs。复制它们需要测试种子,最坏的情况是全部 4294967295,但即使我们平均约 100 次测试也相当冗长。
我们一直考虑在外部将 PYTHONHASHSEED 设置为随机但已知的值,但希望避免这个额外的层。
【问题讨论】:
标签: python python-3.x unit-testing hash