私はWindows上でPython 3.6を使用しており、コンピューティングストリングハッシュを含む並列化可能なタスクを持っています。これは、基本的には私の問題の最小バージョンです:スレッド間でPythonのハッシュが異なる
今#!/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
について知っていますが、コード内の解決策を見つけることを好むでしょう)
一時的な回避策はありませんがわかります
os.environ
行が使用することです明示的なハッシュ: 'hashlib.md5(foo.encode())。hexdigest()' – Opossum