【发布时间】:2021-12-08 04:38:58
【问题描述】:
我是 Python 新手,我有一个场景,我想将测量数据写入 2 个文件,main() 函数中的一个文件和WriteToFile() 函数中的另一个文件,每 10 次写入一行新数据秒。
如何使WriteFile() 在main() 循环中被触发一次,然后在main() 循环迭代完成后运行2 分钟?然后我怎样才能在CleanUp() 中优雅地退出WriteToFile(),确保FastFile.txt 已正确关闭?
这是一个简化的程序示例:
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()
我正在使用Python 3.5.3,但可以升级以适应需要更高版本 Python 的解决方案。
【问题讨论】:
-
你可以使用多处理
标签: python multithreading loops file asynchronous