WSGI中的对象持久性

问题描述:

我一直在为简单的树莓派项目开发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函数内调用它。

对于任何人在2020年看着这样的:

我改变的mod_wsgi为单线程模式。我不确定它是否与Python,mod_wsgi或bad juju有关,但它仍然不会长久。几个小时后,PWM将全部停止。我试着滚动我自己的PWM守护进程,但最终与pigpio模块(是琼东南?)一起使用。它一直在为我完美工作。

对于mod_wsgi非常重要,如果您需要内存中的内容来保持跨请求,那么您必须使用mod_wsgi守护程序模式而不是嵌入模式。嵌入模式是默认的,所以你需要确保你正在配置它。守护进程模式的默认值是单进程,因此请求将始终使用相同的进程。尽管如此,它仍然是多线程的,所以请确保您使用线程锁定来保护全局数据访问/更新。在

详细嵌入式VS守护模式:

您将看到有关文件守护进程模式这也解释了你应该如何配置你的虚拟环境的一些例子。