print random data for each millisecond python
<p>I want to print random data ranging from -1 to 1 in csv file for each millisecond using Python. I started with to print for each second and it worked. But, I am facing difficulty with printing random data for each millisecond. I want the timestamp to be in UNIX epoch format like "1476449030.55676" (for milliseconds, decimal point is not required)</p>

<pre><code>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 &lt; 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()
</code></pre>

<p>UPD: <code>time.sleep()</code> accepts argument in seconds, so you don't need to divide it by 1000. After fixing this, my output looks like this:</p>

<pre><code>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
</code></pre>

<p>Which is as good as it gets, given the precision of time.sleep and other time functions.</p>

<p>Here's a stripped down version, which outputs timestamps into stdout every second:</p>

<pre><code>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
</code></pre>

<p>================================================</p>

<p>This is the problem:</p>

<pre><code>float(tdiff.total_seconds()/1000)
</code></pre>

<p>You use integer division, and then convert result to float.
Instead, you need to use float division: </p>

<pre><code>tdiff.total_seconds()/1000.0
</code></pre>

python csv printing milliseconds