2017-09-11 3 views
0

Ich habe ein Web-Interface für ein einfaches Himbeer-Pi-Projekt entwickelt. Es schaltet nur die Lichter ein und aus, aber ich habe versucht, eine Dimmfunktion mit PWM hinzuzufügen.Object Persistence in WSGI

Ich verwende modWSGI mit Apache und RPi.GPIO für GPIO-Zugriff. Für meinen Prototyp verwende ich (3) SN74HC595 in Reihe für die LED-Ausgänge und versuche, die OE-Linie zu PWM zu dimmen, um die Lichter zu dimmen.

Der Betrieb der Schieberegister ist einfach, weil sie die Ausgänge zwischen Updates halten. Damit PWM jedoch funktioniert, muss die GPIO.PWM-Instanz zwischen WSGI-Sitzungen aktiv bleiben. Damit habe ich Probleme. Ich arbeite seit ein paar Tagen daran und habe hier ein paar ähnliche Fragen gesehen. Aber nichts für aktive Objekte wie PWM, nur einfache Zähler und so.

Meine beiden Gedanken sind:

1) Verwenden Sie den globalen Bereich des PWM-Objekt zu halten und PWM.ChangeDutyCycle() in der WSGI Funktion Helligkeit ändern. Dieser Ansatz hat früher funktioniert, aber es scheint, als ob es nicht hier wäre.

Oder 2) Erstellen Sie einen System-Level-Daemon (oder etwas) und Aufrufe an diese innerhalb meiner WSGI-Funktion.

Antwort

0

Für alle in diesem im Jahr 2020 suchen:

Ich änderte mod_wsgi zu einzelnen Thread-Modus. Ich bin mir nicht sicher, ob es mit Python, mod_wsgi oder schlechtem juju zu tun hat, aber es würde nicht lange dauern. Nach ein paar Stunden würde die PWM vollständig abgeschaltet sein.

Ich habe versucht, meinen eigenen PWM-Daemon zu rollen, ging aber letztlich mit dem Pigpio-Modul (ist Joan am SE?). Es hat perfekt für mich gearbeitet.

0

Sehr wichtig mit mod_wsgi, wenn Sie Dinge im Speicher benötigen, um über Anforderungen bestehen zu bleiben, ist, dass Sie mod_wsgi Daemon-Modus und nicht eingebetteten Modus verwenden müssen. Der integrierte Modus ist jedoch der Standard. Sie müssen also sicherstellen, dass Sie ihn konfigurieren. Die Standardeinstellung für den Daemon-Modus ist ein einzelner Prozess, und Anfragen treffen immer den gleichen Prozess. Es ist jedoch immer noch Multithread, also stellen Sie sicher, dass Sie den globalen Datenzugriff/Update mit Thread-Locking schützen.

Details zu in vs Daemon-Modus eingebettet:

Sie einig Beispiel über Daemon-Modus in dem Dokument sehen, die auch erklärt, wie Sie Ihre virtuelle Umgebung zu konfigurieren werden sollen.