Skip to main content
 首页 » 编程设计

python之gunicorn 无法启动 flask

2025年05月04日25cmt

我无法通过 gunicorn 启动 flask 。当我输入“gunicorn run:app”时,服务器给我错误。但是我检查没有使用127.0.0.1:8000的服务。我可以使用“python run.py”来运行这个应用程序。

root@ip-172-31-18-230:/var/www/vamk.help/vamk# gunicorn run:app 
[2016-05-11 02:13:09 +0000] [20288] [INFO] Starting gunicorn 19.4.5 
[2016-05-11 02:13:09 +0000] [20288] [INFO] Listening at: http://127.0.0.1:8000 (                                                                                                 20288) 
[2016-05-11 02:13:09 +0000] [20288] [INFO] Using worker: sync 
[2016-05-11 02:13:09 +0000] [20293] [INFO] Booting worker with pid: 20293 
[2016-05-11 02:13:10 +0000] [20293] [ERROR] Exception in worker process: 
Traceback (most recent call last): 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, i                                                                                                 n spawn_worker 
    worker.init_process() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 1                                                                                                 22, in init_process 
    self.load_wsgi() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 1                                                                                                 30, in load_wsgi 
    self.wsgi = self.app.wsgi() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, i                                                                                                 n wsgi 
    self.callable = self.load() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65                                                                                                 , in load 
    return self.load_wsgiapp() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52                                                                                                 , in load_wsgiapp 
    return util.import_app(self.app_uri) 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in i                                                                                                 mport_app 
    __import__(module) 
  File "/var/www/vamk.help/vamk/run.py", line 3, in <module> 
    app.run(threaded=True, debug=app.config['DEBUG'], port=app.config['PORT']) 
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 772, in run 
    run_simple(host, port, self, **options) 
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 677, i                                                                                                 n run_simple 
    s.bind((hostname, port)) 
  File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
error: [Errno 98] Address already in use 
Traceback (most recent call last): 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, i                                                                                                 n spawn_worker 
    worker.init_process() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 1                                                                                                 22, in init_process 
    self.load_wsgi() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 1                                                                                                 30, in load_wsgi 
    self.wsgi = self.app.wsgi() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, i                                                                                                 n wsgi 
    self.callable = self.load() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65                                                                                                 , in load 
    return self.load_wsgiapp() 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52                                                                                                 , in load_wsgiapp 
    return util.import_app(self.app_uri) 
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in i                                                                                                 mport_app 
    __import__(module) 
  File "/var/www/vamk.help/vamk/run.py", line 3, in <module> 
    app.run(threaded=True, debug=app.config['DEBUG'], port=app.config['PORT']) 
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 772, in run 
    run_simple(host, port, self, **options) 
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 677, i                                                                                                 n run_simple 
    s.bind((hostname, port)) 
  File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
error: [Errno 98] Address already in use 

运行.py

from app import app 
 
app.run(debug=app.config['DEBUG'], port=app.config['PORT']) 

请您参考如下方法:

要将 flask 与 gunicorn 一起使用,您不必运行应用程序 (app.run()),因为它是一个仅用于测试的单一阻塞进程。

而是将启动变量 app 的 flask app 模块(如果它是单个文件,则传递文件名)作为参数传递给 gunicorn,而不是外部 run.py。

这才是gunicorn配合flask使用的正确方法。

gunicorn  -b HOST:PORT <MODULE_NAME>:app 

用正确的模块或文件名替换 MODULE_NAME。使用-b标志设置IP地址和端口号。