在Python中正确终止线程
我不太熟悉线程,可能没有正确使用它,但我有一个脚本,可以运行几次speedtest并打印平均值。我试图使用线程来调用一个函数,该函数在测试运行时显示一些内容 一切正常,除非我尝试在脚本末尾放置input(),以保持控制台窗口打开。它使线程连续运行。在Python中正确终止线程,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,我不太熟悉线程,可能没有正确使用它,但我有一个脚本,可以运行几次speedtest并打印平均值。我试图使用线程来调用一个函数,该函数在测试运行时显示一些内容 一切正常,除非我尝试在脚本末尾放置input(),以保持控制台窗口打开。它使线程连续运行。 我在寻找正确终止线程的方向。也有更好的方法可以做到这一点 import speedtest, time, sys, datetime from threading import Thread s = speedtest.Speedtest() be
我在寻找正确终止线程的方向。也有更好的方法可以做到这一点
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
线程没有退出的理由,这就是为什么它不会终止。守护进程线程通常在您的程序(所有其他线程)终止时终止,这不会发生,因为最后一个输入没有退出 一般来说,让线程自行停止是一个好主意,而不是强制终止它,因此通常使用标志终止此类线程。尝试将末端的线段更改为:
killflag = False
start()
killflag = True
input("Complete...")
并将进度方法更新为:
def progress():
while not killflag:
print('~ ',end='', flush=True)
time.sleep(1)
你是故意不在d结束后杀死d1吗?我将d1设置为一个守护进程,这样它在d结束时终止。如果没有最后一行上的输入,它将正确执行此操作。我如何故意正确终止d?
d
将正确终止,因为您正在加入它,并且它不是无限循环。如果在完成时键入一些输入并点击return,程序是否会按预期终止?或者它在输入语句后被卡住了,打印过程永远是d1?在我输入一些东西后它确实停止了。我想这是有道理的。我的目标是在测试完成后保持控制台打开,这就完成了。多谢各位