我是 Python 新手,我有一個場景,我想將測量資料寫入 2 個檔案,一個是main()函式內的檔案,另一個是函式內的另一個檔案,該檔案WriteToFile()每 10 秒寫入一行新資料。如何WriteFile()在main()回圈中觸發一次,然后在main()回圈迭代完成后運行 2 分鐘?我怎樣才能WriteToFile()在 中優雅地退出CleanUp(),確保它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 的解決方案。
uj5u.com熱心網友回復:
你需要threading!你if __name__="__main__"必須像下面這樣:
if __name__ == "__main__":
t1 = threading.Thread(target=WriteToFile)
t2 = threading.Thread(target=loop) # put the loop in a new function and call it using this
t1.start()
t2.start()
t1.join()
t2.join()
您的main()函式必須重命名為 loop 或任何您喜歡的名稱,而無需呼叫WriteToFile(). 記得在代碼開頭匯入執行緒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334141.html
下一篇:在android11中下載pdf
