Dynamisches Aktualisieren von Multiprocessing oder Multithreading in Python

8

Ich habe einen Multiprozessor-Downloader implementiert. Wie kann ich die Statusleiste drucken (vollständige Rate, Download-Geschwindigkeit), die automatisch aktualisiert werden kann in verschiedenen Teilen auf dem Terminal.

So:

%Vor%

code:

%Vor%

DownloadProcess erbt die Process-Klasse und löst die Download-Methode aus.

Ich benutze die Warteschlange, um die URL zu speichern. Hier ist der Startvorgang

%Vor%     
Bob Sun 19.12.2012, 03:11
quelle

1 Antwort

21

Unten finden Sie eine Demo, die sowohl Multi-Processing als auch Multi-Threading implementiert hat. Um den einen oder anderen auszuprobieren, entfernen Sie einfach die Importzeilen oben im Code. Wenn Sie einen Fortschrittsbalken in einer einzelnen Zeile haben, können Sie mit der Technik, mit der Sie '\ r' drucken, den Cursor zurück zum Anfang der Zeile bewegen. Aber wenn Sie mehrzeilige Fortschrittsbalken haben wollen, dann müssen Sie sich ein wenig Züchter werden. Ich habe den Bildschirm jedes Mal gelöscht, wenn ich die Fortschrittsbalken drucken wollte. Schauen Sie sich den Artikel Konsolenausgaben an Unix in Python half mir sehr bei der Erstellung des unten stehenden Codes. Er zeigt beide Techniken. Sie können der curses-Bibliothek, die Teil der Python-Standardbibliothek ist, auch eine Aufnahme geben. Die Frage Multiline-Fortschrittsbalken fragt ähnlich. Der Hauptthread / Prozess erzeugt die untergeordneten Threads, die die Arbeit ausführen, und übermittelt ihren Fortschritt über eine Warteschlange an den Hauptthread. Ich empfehle dringend, Warteschlangen für die Kommunikation zwischen Prozessen und Threads zu verwenden. Der Haupt-Thread zeigt dann den Fortschritt an und wartet darauf, dass alle Kinder die Ausführung beenden, bevor sie sich selbst beenden.

Code

%Vor%

Demo

    
Marwan Alsabbagh 19.12.2012 06:41
quelle

Tags und Links