I am new to Python and I have a scenario where I want to write measurement data to 2 files, one file within the main() function and another file within a function WriteToFile() which writes a new line of data every 10 seconds.
How can I make WriteFile() get fired once in the main() loop and then run until 2 minutes after the main() loop iteration completes? How can I then exit WriteToFile() gracefully in CleanUp(), ensuring that FastFile.txt has closed properly?
Here is a simplified program example:
from datetime import datetime
import os
import time
import sys
import random
M_Max = 2000
M_Array = [740]
D_Array = [5, 10, 20, 100, 150, 200, 400,600, 740]
M=random.random()*20000
D=random.random()*7500
#write data to a file every ten seconds
def WriteToFile():
while True:
h = open("FastFile.txt", "a")
current_time_t=datetime.now().strftime("%d.%m.%y %H:%M:%S")
p = random.random()*1000
c = random.random()*100
print("Fast_Time :", '{} {:9.0f} {:9.0f} {:9.3f} {:9.1f} '.format(current_time_t, M, D, p, c))
h.write("\n %s , %s , %s , %s, %s " % (current_time_t, str('{:.1f}'.format(M)), str('{:.1f}'.format(D)), str('{:.3f}'.format(p)), str('{:.2f}'.format(
c))))
h.close()
time.sleep(10)
def CleanUp():
print("Cleaning up")
#wait two minutes then stop WriteToFile()
time.sleep(120)
sys.exit()
print("Done")
def main():
global M, D
WriteToFile() # call this function and start writing data including the global variables M and N generated here
print("Starting measurement")
time.sleep(3)
for M in M_Array:
for D in D_Array:
p = random.random()*1000
c = random.random()*100
g = open("SlowFile.txt", "a")
current_time_t = datetime.now().strftime("%d.%m.%y %H:%M:%S")
print("Main_Time :", '{} {:9.0f} {:9.0f} {:9.3f} {:9.1f} '.format(current_time_t, M, D, p, c))
#write the result of each iteration to a file
g.write("\n %s , %s , %s , %s, %s " % (current_time_t, str('{:.1f}'.format(M)), str('{:.1f}'.format(D)), str('{:.3f}'.format(p)), str('{:.2f}'.format(
c))))
g.close()
CleanUp()
if __name__ == "__main__":
main()
I am using Python 3.5.3 but can upgrade to accommodate solutions that require higher versions of Python.