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

时间:2015-10-22 23:28:24

标签: python multithreading pyside

我正在使用PySide,并在辅助线程上运行下载,因此用户界面无法阻止。

它基本上只是一个按钮,可以在新线程上开始下载并将文件保存到磁盘。我想要取消"取消"停止下载的按钮。我已经找到了阻止线程的方法,但它们似乎是hackish,看起来像是不应该做的事情。

如果线程停止是hackish,那么这样做的正确方法是什么?它显然是在数百种软件中完成的。也许带着旗帜?我的帖子看起来像这样。一旦它开始,我就不知道如何"暂停"它或停止它。

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
            '''

感谢。

1 个答案:

答案 0 :(得分:1)

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

我认为应该工作......