Da ist ja das ProblemBlackJack hat geschrieben:Und dann als aktuellen Wert einfach die aktuelle Anzahl von Bytes setzen.

Code: Alles auswählen
file_size = int(requests.head(self.url).headers.get('content-length', [0]))
print "%s Byte" %file_size
Die Datei ist also 62,2 MB groß. Und nun nochmal, was soll daran nicht stimmen?65250090 Byte
Code: Alles auswählen
chunk_size = (8127)
downloaded_bytes = 0
with open(self.location, 'wb') as fd:
for chunk in file.iter_content(chunk_size):
fd.write(chunk)
downloaded_bytes += chunk_size
print (float(downloaded_bytes)/file_size*100)
self.notify_progress.emit(float(downloaded_bytes)/file_size*100)
Wieso "zu spät"? Das Beispiel rennt ja nicht wegSophus hat geschrieben:Hallo Hyperion und BlackJack, danke für die Hinweise, und für das beste Beispiel der Welt, Hyperion. Aber ich habe zu spät bemerkt, dass du mir ein Beispiel präsentierst, ...
Code: Alles auswählen
fd.write(chunk)
downloaded_bytes += chunk_size
Code: Alles auswählen
with open(self.location, 'wb') as fd:
for chunk in file.iter_content(chunk_size):
fd.write(chunk)
downloaded_bytes += chunk
print (float(downloaded_bytes)/file_size*100)
self.notify_progress.emit(float(downloaded_bytes)/file_size*100)
Code: Alles auswählen
with open(self.location, 'wb') as fd:
for chunk in file.iter_content(chunk_size):
fd.write(chunk)
self.notify_progress_emit(chunk)
Code: Alles auswählen
downloaded_bytes += len(chunk)
Code: Alles auswählen
downloaded_bytes = fd.tell()
Code: Alles auswählen
class Download_Thread(QThread):
finished_thread = pyqtSignal()
notify_progress = pyqtSignal(int)
def __init__(self, loc, link):
QThread.__init__(self)
self.url = link
self.location = loc
def run(self):
print self.url
print self.location
file = requests.get(self.url, stream=True)
file_size = int(requests.head(self.url).headers.get('content-length', [0]))
print "%s Byte" %file_size
result = file_size / (1024*5)
print result
chunk_size = int(result)
downloaded_bytes = 0
with open(self.location, 'wb') as fd:
for chunk in file.iter_content(chunk_size):
fd.write(chunk)
downloaded_bytes = fd.tell() # sehr genau und direkt
print (float(downloaded_bytes)/file_size*100)
self.notify_progress.emit(float(downloaded_bytes)/file_size*100)
print "Finish"
self.finished_thread.emit()
def stop(self):
print "Cancel"
self.finished_thread.emit()
self.terminate()
Welche Möglich gibt es, den Vorgang sauber abzubrechen? Mit quit()-Methode habe ich auch schon versucht - klappt leider nicht.Warning: This function is dangerous and its use is discouraged. The thread can be terminated at any point in its code path. Threads can be terminated while modifying data. There is no chance for the thread to clean up after itself, unlock any held mutexes, etc. In short, use this function only if absolutely necessary.
Ich verweise da noch mal auf das beste Beispiel der Welt zu diesem ThemaSophus hat geschrieben: Welche Möglich gibt es, den Vorgang sauber abzubrechen? Mit quit()-Methode habe ich auch schon versucht - klappt leider nicht.