【发布时间】:2017-02-02 10:35:09
【问题描述】:
我在 Windows 上使用 Python 3.6,并且有一个可并行化的任务,其中包括计算字符串哈希。这基本上是我的问题的最小版本:
#!/usr/bin/env python3
from joblib import Parallel, delayed
def hash_some(foo):
return hash(foo)
def main():
hashes = Parallel(n_jobs=10)(delayed(hash_some)(s) for s in ['a', 'a', 'a'])
print(hashes)
if __name__ == '__main__':
main()
现在,由于某种原因,这会打印出来,例如:
[3220780809080710068, -561460911962106608, -1551910331007446174]
它们显然应该都是一样的。
哈希值并不总是不同,尤其是对于较低的 n_job 值,它们通常结果相同,但这不能保证。
我知道hash() 在每次程序调用时使用随机种子,但为什么它显然在每个线程中使用不同的种子?有什么方法可以为我的所有线程设置一个固定(但随机)的种子? (我知道PYTHONHASHSEED=0,但我更愿意找到代码内解决方案)
【问题讨论】:
-
我现在的临时解决方法是使用显式哈希:
hashlib.md5(foo.encode()).hexdigest()
标签: python hash concurrency parallel-processing