我正在运行一个依赖于随机性的大规模并行处理。问题在于并行进程中的每个工作人员都与父进程共享相同的随机种子,从而破坏了我进行不同随机模拟的尝试。
因此,我遇到了一个问题,即如何在开始时为每个工作人员设置不同的随机种子。我当前的解决方案是将time.time()
的微秒部分除去并将其转换为整数,然后再将其传递给random.seed()
。看起来如下。有更好的方法吗?
import re
import random
import time
def set_random_seed():
seed = int(re.sub(r'[^0-9]', '', str(time.time())[-7:]))
random.seed(seed)
答案 0 :(得分:4)
请参阅:https://docs.python.org/3/library/random.html#random.seed
如果省略种子,将使用os.urandom-如果有的话。您可以致电:
random.seed()
如果您担心无法使用os.urandom
的情况,请在主流程中生成唯一的种子,然后将其传递给您启动的每个流程。