我一直致力于Raspberry Pi的车库门自动化应用程序,它允许您远程打开/关闭车库门以及检查门的状态(无论是打开还是关闭)。我已经在GitHub上发布了代码:Link to GitHub。
有时,我的网络似乎无法访问应用程序,好像Flask只是停止响应Web请求一样。但是,当发生这种情况时,我仍然可以通过SSH进入我的pi。重启会重新启动Web界面,没有任何问题。
经过一些阅读,据我所知,Flask中的内置网络服务器真的不健壮,不应该在生产环境中使用,所以我决定尝试将Gunicorn和nginx设置为处理工作而不是。我修改了代码并尝试运行Gunicorn。不幸的是,Gunicorn似乎报告了线程库的错误(我用它来检查后台门的状态)。以下是我尝试运行时Gunicorn的一些输出:
pi@raspi-4:~/garage-pi $ sudo gunicorn app:app
[2016-07-17 11:06:08 +0000] [745] [INFO] Starting gunicorn 19.6.0
[2016-07-17 11:06:08 +0000] [745] [INFO] Listening at: http://127.0.0.1:8000 (745)
[2016-07-17 11:06:08 +0000] [745] [INFO] Using worker: sync
[2016-07-17 11:06:08 +0000] [750] [INFO] Booting worker with pid: 750
[2016-07-17 11:06:08 +0000] [750] [INFO] Worker exiting (pid: 750)
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/pi/garage-pi/app.py", line 21, in checkdoorstate
if (RPi.GPIO.input(18) == True and door_state != True):
AttributeError: 'NoneType' object has no attribute 'GPIO'
所有这些都说明了,我已经超出了我的深度,想知道这个设置是否完全可能,或者我将继续遇到与Gunicorn一起使用线程Python库的问题?有关如何解决此问题的任何想法?
非常感谢提前。
答案 0 :(得分:0)
您可以使用Gunicorn的多个工作人员或异步工作人员启动您的应用程序。 带有gevent异步工作者的Gunicorn
gunicorn server:app -k gevent --worker-connections 1000
独角兽1号工人12条线:
gunicorn server:`app -w 1 --threads 12
有4名工人的独角兽(多处理):
gunicorn server:app -w 4
本文中有关Flask并发的更多信息:多少个并发requests does a single Flask process receive?。
来源