Bitte um Audit/Review: pygobject, asyncio, threading,

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Bitte um Audit/Review: pygobject, asyncio, threading,

Beitrag von buhtz » 10.03.2019 21:14:58

Im Rahmen meines sich in (noch früher) Entwicklung befindlichen Feedreaders möchte ich euch um ein Code-Audit bzgl. einer bestimmten Funktion bitten. Der unten verlinkte Code stellt das Szenario verinfacht im Sinne eines minimal working examples dar, aber ist doch schon relativ groß, weshalb ich ihn in die Pastezone geschoben habe. Ich bräuchte jemanden der wirklich Erfahrung und Ahnung mit asynchroner Programmierung in Python3 hat.

Der Code tut IMO das was er soll, jedoch bin ich mir sehr unsicher, ob der Lösungsweg sinnvoll ist und auf Dauer nicht vielleicht andere Probleme verursachen könnte. Es geht um asynchrone Programmierung und Multi-Threading in Verbindung mit einer Gtk-GUI

paste.debian.net/1072609

Ein Feedreader soll alle neuen Feeds abrufen. Im Beispielcode werden 100 XML-Dateien (Debianfpython3-feedparser) heruntergeladen und geparsed. Damit das schnell geht, geschieht das asynchrone.
Damit die Gtk-GUI nicht einfriert, habe ich den gesamten Vorgang nochmal in einen extra Thread ausgelagert.

Wie findet ihr die Lösung? Geht es einfacher?

EDIT: Noch zwei Gedanken dazu:

Wenn ich hier sowieso für jeden Download einen eigenen Thread starte (per ThreadPoolExecutor), warum brauche ich dann überhaupt noch asyncio? Bin sehr verwirrt bei dem Thema.

Lässt man den Code laufen wird ersichtlich, dass zuerst die 100 Tasks gestartet werden und erst danach die ersten Ergebnisse reinkommen. Meinem Verständnis/Wunschdenken nach, sollte das aber "gleichzeitig" passieren. EDIT-2: Habe diese Teilfrage mal auf StackOverflow dargestellt.

btw: Der Feedreader (Feedybus) hat noch kein öffentliches repository, wird aber auf absehbare Zeit unter GPL veröffentlicht.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Antworten