Python线程,Flask和Gunicorn的问题

时间:2016-07-17 18:19:22

标签: python multithreading flask gunicorn

我一直致力于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库的问题?有关如何解决此问题的任何想法?

非常感谢提前。

1 个答案:

答案 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?

来源