停止正在下载文件的线程的最佳方法

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

我认为应该可以...