Jupyter 内核重启之间的随机性

Randomness between Jupyter Kernel Restarts

问题: 我目前正在处理数据集群,并在我的 Jupyter Notebooks 中发现了一个奇怪的行为。所有种子都是固定的。多次执行部分或全部代码会产生稳定的结果。重新启动内核会导致结果发生变化。无论如何,只要内核处于活动状态,这些新结果就是稳定的。

import numpy as np
import random, os

# Fix Seeds
def fix_seeds(seed=1234):
    random.seed(seed)
    np.random.seed(seed)

# In case the modules do something on import
fix_seeds()

# Other imports (Only depending on random and/or numpy)

所以我的问题是: 随机性是如何或在什么时候引入的,以及如何解决它?

显然 Python >= 3.3 使用随机 Hash-Seed 来避免碰撞攻击。修复该种子(例如执行 PYTHONHASHSEED=0 python3 <file>.py)解决了我的问题。内核也是如此。在启动时,它们也会生成 Hash-Seed。

来源: https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED