Performance Frage - Screenshot Modul

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Guten Tag,

ich hatte an einem Projekt gearbeitet, welches mich zwar einiges an Zeit kostete, aber mich intellektuell echt gut weiter gebracht hat, denn das ist mein erstes 'großes' Projekt.
Wie aber wahrscheinlich jeder Programmierer irgendwann einmal, muss man sich mit der Performance auseinander setzen.
Aktuell liegt mein Programm bei einer Laufzeit von ~90ms (~11FPS), was für mein Vorhaben, von einem Programm Screenshots zu machen (die nicht als Datei gespeichert werden) und mit OpenCV zu verarbeiten, zu langsam ist.

Die meiste Zeit beansprucht hier leider das Screenshotmodul (im Allgemeinen).
Zuerst nutzte ich 'ImageGrab' und nun 'mss', dass i.d.R. ~60ms (abhängig von Größe des Fensters) braucht.
D.h. 2/3 der Laufzeit geht nur an die Screenshots und nur 1/3 der Zeit wird für den Rest benötigt.

Nun frage ich mich, ob es noch ein schnelleres Modul als 'mss' gibt, um Screenshots aufzunehmen und mit OpenCV zu verarbeiten?
Leider wurde ich bei Google nicht so wirklich fündig.

Grüße,
xXSkyWalkerXx1
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich nehme mal an, dass threading hier schon viel bringt?
Schau später Mal hinein.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Habe das Aufnehmen des Fensters nun in ein seperaten Thread gesteckt und es funktioniert auch "schneller".
Wie das in der praktischen Anwendung aussieht, werde ich mir später anschauen. Muss bestimmt den Teil doch noch ändern.
Allerdings habe ich bemerkt, dass der Durchlauf der 'run()' Funktion (durch threading.Thread) unterschiedlich lang dauert.

Liegt das an einer möglichen ineffizienten Programmierung meinerseits oder liegt das an Python (GIL) bzw. den implementierten Modulen selbst?

[EDIT] Wohl wegen GIL.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie soll man das wieder beantworten können, ohne den Code zu sehen?
Antworten