停止正在下载文件的线程的最佳方法
Best approach to stop a thread that's downloading a file
我正在使用 PySide,运行 在辅助线程上下载,因此 UI 不会阻塞。
它基本上只是一个按钮,用于在新线程上开始下载并将文件保存到磁盘。我想要一个停止下载的 "cancel" 按钮。我已经查找了停止线程的方法,但它们看起来很老套,看起来像是不应该做的事情。
如果线程停止是 hackish,那么正确的方法是什么?这显然是在数百种软件中完成的。也许有一面旗帜?我的线程看起来像这样。一旦开始,我不知道如何"pause"它或停止它。
goOn = True
def MyThread(threading.Thread):
def __init__(self, url):
super().__init__(self)
self.url = url
def run(self):
data = urllib.request.urlopen(self.url)
f = open('fileName', 'wb')
size = int(data.headers['Content-Length'])
downloaded = 0
blockSize = 1024 * 8
while True:
buffer = data.read(blockSize)
if not buffer:
break
f.write(buffer)
downloaded += blockSize
'''
if not goOn: # Something like this?
break
'''
谢谢。
def MyThread(threading.Thread):
def __init__(self, url):
super().__init__(self)
self.url = url
def run(self):
data = urllib.request.urlopen(self.url)
f = open('fileName', 'wb')
size = int(data.headers['Content-Length'])
downloaded = 0
blockSize = 1024 * 8
self.running = 1
while self.running:
buffer = data.read(blockSize)
if not buffer:
break
f.write(buffer)
downloaded += blockSize
def stop_running(self):
self.running =0
我认为应该可以...
我正在使用 PySide,运行 在辅助线程上下载,因此 UI 不会阻塞。
它基本上只是一个按钮,用于在新线程上开始下载并将文件保存到磁盘。我想要一个停止下载的 "cancel" 按钮。我已经查找了停止线程的方法,但它们看起来很老套,看起来像是不应该做的事情。
如果线程停止是 hackish,那么正确的方法是什么?这显然是在数百种软件中完成的。也许有一面旗帜?我的线程看起来像这样。一旦开始,我不知道如何"pause"它或停止它。
goOn = True
def MyThread(threading.Thread):
def __init__(self, url):
super().__init__(self)
self.url = url
def run(self):
data = urllib.request.urlopen(self.url)
f = open('fileName', 'wb')
size = int(data.headers['Content-Length'])
downloaded = 0
blockSize = 1024 * 8
while True:
buffer = data.read(blockSize)
if not buffer:
break
f.write(buffer)
downloaded += blockSize
'''
if not goOn: # Something like this?
break
'''
谢谢。
def MyThread(threading.Thread):
def __init__(self, url):
super().__init__(self)
self.url = url
def run(self):
data = urllib.request.urlopen(self.url)
f = open('fileName', 'wb')
size = int(data.headers['Content-Length'])
downloaded = 0
blockSize = 1024 * 8
self.running = 1
while self.running:
buffer = data.read(blockSize)
if not buffer:
break
f.write(buffer)
downloaded += blockSize
def stop_running(self):
self.running =0
我认为应该可以...