每毫秒打印随机数据 python

print random data for each millisecond python

我想使用 Python 每毫秒在 csv 文件中打印范围从 -1 到 1 的随机数据。我开始每秒打印一次并且它有效。但是,我在每毫秒打印随机数据时遇到困难。我希望时间戳采用 UNIX 纪元格式,如“1476449030.55676”(毫秒,不需要小数点)

tstep = datetime.timedelta(milliseconds=1)
tnext = datetime.datetime.now() + tstep
NumberOfReadings = 10;  # 10 values ( 1 value for 1 millisecond)
i = 0;
f = open(sys.argv[1], 'w+')
try: 
    writer = csv.writer(f)  
    while i < NumberOfReadings:
        writer.writerow((random.uniform(-1, 1), time.time()))
        tdiff = tnext - datetime.datetime.now()
        time.sleep(float(tdiff.total_seconds()/1000))
        tnext = tnext + tstep
        i =i+1;
finally:
    f.close()

UPD:time.sleep() 以秒为单位接受参数,因此您无需将其除以 1000。修复此问题后,我的输出如下所示:

0.18153176446804853,1476466290.720721
-0.9331178681567136,1476466290.721784
-0.37142653326337327,1476466290.722779
0.1397040393287503,1476466290.723766
0.7126280853504974,1476466290.724768
-0.5367844384018245,1476466290.725762
0.44284645253432786,1476466290.726747
-0.2914685960956531,1476466290.727744
-0.40353712249981943,1476466290.728778
0.035369003158632895,1476466290.729771

考虑到 time.sleep 和其他时间函数的精度,这已经很好了。

这是一个精简版,每秒将时间戳输出到标准输出:

import time

tstep = 0.001
tnext = time.time() + tstep
NumberOfReadings = 10;  # 10 values ( 1 value for 1 millisecond)

for  i in range(NumberOfReadings):
    now = time.time()
    print(now)
    time.sleep(tnext - now)
    tnext += tstep

=========================================== ===

这是问题所在:

float(tdiff.total_seconds()/1000)

您使用整数除法,然后将结果转换为浮点数。 相反,您需要使用浮点除法:

tdiff.total_seconds()/1000.0