【发布时间】:2019-02-02 06:30:37
【问题描述】:
这类似于a previous question,但用于multiprocessing 而不是subprocess。看来动态改变PYTHONHASHSEED在使用multiprocessing时没有效果,不像subprocess:
#check_environ.py
import os, multiprocessing, subprocess, sys
s = 'hello'
print('parent', os.getenv('PYTHONHASHSEED'), hash(s))
if len(sys.argv) > 1:
os.environ['PYTHONHASHSEED'] = sys.argv[1]
subprocess.call(['python', '-c', "import os;print('subprocess', os.getenv('PYTHONHASHSEED'), hash('{}'))".format(s)])
multiprocessing.Process(target=lambda:print('multiprocessing', os.getenv('PYTHONHASHSEED'), hash(s))).start()
示例运行:
# explicit PYTHONHASHSEED for subprocess/multiprocessing
$ python check_environ.py 12
parent None 4472558296122225349
subprocess 12 -8207222429063474615
multiprocessing 12 4472558296122225349
# random PYTHONHASHSEED for subprocess/multiprocessing
$ python check_environ.py
parent None 7990499464460966677
subprocess None 1081030409066486350
multiprocessing None 7990499464460966677
所以无论如何,multiprocessing 哈希使用与父级相同的种子。有没有办法强制multiprocessing 产生的子进程使用不同的哈希种子?
【问题讨论】:
标签: python multiprocessing python-multiprocessing