我对线程不太熟悉,可能没有正确使用它,但是我有一个脚本运行速度测试几次并打印平均值。我尝试使用线程来调用在测试运行时显示某些内容的函数。
除非我尝试在脚本末尾放置input()以保持控制台窗口打开,否则一切正常。它会使线程连续运行 我正在寻找正确终止线程的方向。也可以采取任何更好的方式来做到这一点。
import speedtest, time, sys, datetime
from threading import Thread
s = speedtest.Speedtest()
best = s.get_best_server()
def downloadTest(tries):
x=0
downloadList = []
for x in range(tries):
downSpeed = (s.download()/1000000)
downloadList.append(downSpeed)
x+=1
results_dict = s.results.dict()
global download_avg, isp
download_avg = (sum(downloadList)/len(downloadList))
download_avg = round(download_avg,1)
isp = (results_dict['client']['isp'])
print("")
print(isp)
print(download_avg)
def progress():
while True:
print('~ ',end='', flush=True)
time.sleep(1)
def start():
now=(datetime.datetime.today().replace(microsecond=0))
print(now)
d = Thread(target= downloadTest, args=(3,))
d.start()
d1 = Thread(target = progress)
d1.daemon = True
d1.start()
d.join()
start()
input("Complete...") # this causes progress thread to keep running
答案 0 :(得分:1)
您的线程没有理由退出,这就是它不会终止的原因。守护程序线程通常在您的程序(所有其他线程)终止时终止,这在此不会发生,因为最后一个输入不会退出。
一般来说,最好让一个线程单独停止,而不是强行杀死它,所以你通常会用一个标志来杀死这种线程。尝试将结尾处的段更改为:
killflag = False
start()
killflag = True
input("Complete...")
并将进度方法更新为:
def progress():
while not killflag:
print('~ ',end='', flush=True)
time.sleep(1)