python中numpy.random.seed设置随机种子是否影响子进程
给出代码:
from multiprocessing import Process import numpy as np class NN(Process): def __init__(self, id): super(NN, self).__init__() self.id = id def run(self): super(NN, self).run() print(np.random.random(5)) print(np.random.random(5)) np.random.seed(1111) print(np.random.random(5)) print(np.random.random(5)) print("="*30) np.random.seed(1111) ps = [NN(i) for i in range(1)] for p in ps: p.start() for p in ps: p.join()
运行结果:
========================================
给出对比代码:
from multiprocessing import Process import numpy as np import time class NN(Process): def __init__(self, id): super(NN, self).__init__() self.id = id def run(self): super(NN, self).run() time.sleep(10) print(np.random.random(5)) np.random.seed(1111) print(np.random.random(5)) ps = [NN(i) for i in range(1)] for p in ps: p.start() np.random.seed(1111) for p in ps: p.join()
运行结果:
-------------------------------------------------------------------
PS:
可以看到,在python生成多进程时会copy父进程中的numpy.random的状态,这其中也包括随机种子的状态; 如果子进程生成完成后,那么父进程中的numpy.random的状态是不会影响子进程的。
========================================================
本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。
如果未特殊标注则为原创,遵循 CC 4.0 BY-SA 版权协议。
posted on 2023-09-11 14:14 Angry_Panda 阅读(29) 评论(0) 编辑 收藏 举报