Rug*_*rra 5 python random parallel-processing seed montecarlo
我需要在不同的机器上并行运行MonteCarlo模拟.代码是用c ++编写的,但程序是用python脚本设置和启动的,它设置了很多东西,尤其是随机种子.函数setseed使用4字节无符号整数
用一个简单的
import time
setseed(int(time.time()))
Run Code Online (Sandbox Code Playgroud)
不是很好,因为我将作业提交到集群上的队列,它们会在几分钟内保持挂起然后它们启动,但是开始时间是不可预测的,可能是两个作业同时开始(秒),所以我切换到:
setseet(int(time.time()*100))
Run Code Online (Sandbox Code Playgroud)
但我不开心 什么是最好的解决方案?也许我可以结合以下信息:时间,机器ID,进程ID.或者最好的解决方案是从/ dev/random(linux机器)读取?
如何从/ dev/random读取4个字节?
f = open("/dev/random","rb")
f.read(4)
Run Code Online (Sandbox Code Playgroud)
给我一个字符串,我想要一个整数!
阅读/dev/random是一个好主意.只需将4字节字符串转换为整数:
f = open("/dev/random","rb")
rnd_str = f.read(4)
Run Code Online (Sandbox Code Playgroud)
使用struct:
import struct
rand_int = struct.unpack('I', rnd_string)[0]
Run Code Online (Sandbox Code Playgroud)
更新大写我是必需的.
或者乘以并添加:
rand_int = 0
for c in rnd_str:
rand_int <<= 8
rand_int += ord(c)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |