2017-09-11 104 views
0

我一直在爲簡單的樹莓派項目開發Web界面。這只是打開和關閉燈光,但我一直在嘗試添加PWM調光功能。WSGI中的對象持久性

我使用modWSGI與Apache和RPi.GPIO進行GPIO訪問。對於我的原型,我正在使用(3)SN74HC595串聯用於LED輸出,並試圖PWM OE線來調暗燈光。

操作移位寄存器很容易,因爲它們將輸出保持在更新之間。但是,要使PWM工作,GPIO.PWM實例必須在WSGI會話之間保持活動狀態。這是我遇到的麻煩。我已經爲此工作了幾天,並在這裏看到了一些類似的問題。但是,對於像PWM這樣的活動對象,只有簡單的計數器等都沒有。

我的兩個想法:

1)使用在全球範圍內舉辦的PWM對象,並使用PWM.ChangeDutyCycle()在WSGI功能來改變亮度。這種方法之前已經奏效,但似乎它可能不在這裏。

或者2)創建一個系統級守護進程(或其他)並在我的WSGI函數內調用它。

回答

0

對於任何人在2020年看着這樣的:

我改變的mod_wsgi爲單線程模式。我不確定它是否與Python,mod_wsgi或bad juju有關,但它仍然不會長久。幾個小時後,PWM將全部停止。我試着滾動我自己的PWM守護進程,但最終與pigpio模塊(是瓊東南?)一起使用。它一直在爲我完美工作。

0

對於mod_wsgi非常重要,如果您需要內存中的內容來保持跨請求,那麼您必須使用mod_wsgi守護程序模式而不是嵌入模式。嵌入模式是默認的,所以你需要確保你正在配置它。守護進程模式的默認值是單進程,因此請求將始終使用相同的進程。儘管如此,它仍然是多線程的,所以請確保您使用線程鎖定來保護全局數據訪問/更新。在

詳細嵌入式VS守護模式:

您將看到有關文件守護進程模式這也解釋了你應該如何配置你的虛擬環境的一些例子。