【发布时间】:2012-02-22 05:12:57
【问题描述】:
编辑:在此修订/更新之前,此问题的主要部分是如何终止 QThread。已经解决了,问题正在修改为如何杀死正在进行的请求休息对象。
http://docs.python-requests.org/en/v0.10.4/user/advanced/#asynchronous-requests 它似乎使用异步请求仍然阻塞 - 用户无法在帖子进行中取消帖子。
基本上这是所需的功能: 当用户按下 Stop Uploading 时,上传必须立即停止,我可以使用 stop() 停止线程,但是只有在循环再次循环后才检查它是否应该停止。
所以基本上,应该可以使用异步请求,让我检查是否应该在请求期间取消它,但是,我不知道如何。
有什么建议吗?帖子的前一部分仍然相关,所以它在下面。
请注意,如何终止 QThread 的初始问题已经解决,因此下面的代码并不太重要,它只是为了上下文,我现在需要帮助的就是我刚才描述的内容。
我一直在写一个程序,它是一个照片上传器,我做了一个线程 我在其中上传文件。我不知道如何退出 线。我已经尝试过从这里读到的建议:
1) 我尝试了一个 bool 标志,将它包裹在方法和 for 完成工作的语句。
2) 我使用了“with”,然后尝试设置异常。
我希望能够取消上传,最好是快速取消。我读过一个 很多,总是建议“清理”之前的线程 终止它,老实说,我不知道“清理它”是什么意思。 但是,我认为我应该能够杀死线程 - 因为它只是 所做的是将图像的二进制数据发送到 TUMBLR api。它 如果请求被提前取消应该没关系,因为它会 只需取消 api 中的上传即可。
无论如何,这是我的主题:
class WorkThread(QtCore.QThread): def __init__(self): QtCore.QThread.__init__(self) global w w = WorkThread def __del__(slf): self.wait() def run(self): url = 'https://www.tumblr.com/api/write' files = os.listdir(directory) for file in files: file_path = os.path.join(directory + '\\' + file) file_path = str(file_path) if file_path[-3:] in ['bmp', 'gif', 'jpg', 'png', 'thm', 'tif', 'yuv']: self.emit(QtCore.SIGNAL('update(QString)'), "Uploading %s ..." % file_path) print smart_str(password) data = {'email': email, 'password': password, 'type': 'photo'} with open(file_path, 'rb') as photo: r = requests.post(url, data=data, files={'data': photo}) print r.content self.emit(QtCore.SIGNAL('update(QString)'), 'All finished! Go check out your stuff on tumblr :)\n') return我是这样称呼它的。
def upload(self): self.doneBox.clear() self.workThread = WorkThread() self.connect( self.workThread, QtCore.SIGNAL("update(QString)"), self.startUploading ) self.workThread.start()谁能建议我可以快速终止线程 悄悄地?或者,如果您认为这不好,可以安全地阻止它。
但是,如果我不立即杀死它,它会通过 for 在
run()方法中再次循环,它将上传它的照片 当用户按下“停止上传”时上传。我 不希望它这样做,我宁愿让它停止上传 当前照片用户按下“停止上传”的第二个。谢谢。
【问题讨论】:
标签: python multithreading kill qthread python-requests