Flask应用程序通过Uwsgi导入错误:使用Flask处理多个并行请求

问题描述 投票:0回答:1

我想用uWSGI提供一个简单的Flask App,以便进行具有4个进程的Simple uWSGI部署(并因此响应多个并行请求)。

我创建了包含应用程序的“ simple_app.py”文件:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run()

还有一个“ uwsgi.ini”配置文件:

[uwsgi]
socket = 0.0.0.0:5000
protocol = http
module = simple_app:app
threads = 1
processes = 4

但是,当我尝试使用Terminal命令uwsgi uwsgi.ini在本地Macbook计算机上启动服务器时,它会引起以下导入错误:

*** Operational MODE: preforking ***
Traceback (most recent call last):
  File "./simple_app.py", line 9, in <module>
    from flask import Flask
  File "/anaconda3/lib/python3.7/site-packages/flask/__init__.py", line 14, in <module>
    from jinja2 import escape
  File "/anaconda3/lib/python3.7/site-packages/jinja2/__init__.py", line 33, in <module>
    from jinja2.environment import Environment, Template
  File "/anaconda3/lib/python3.7/site-packages/jinja2/environment.py", line 15, in <module>
    from jinja2 import nodes
  File "/anaconda3/lib/python3.7/site-packages/jinja2/nodes.py", line 19, in <module>
    from jinja2.utils import Markup
  File "/anaconda3/lib/python3.7/site-packages/jinja2/utils.py", line 16, in <module>
    from jinja2._compat import text_type, string_types, implements_iterator, \
  File "/anaconda3/lib/python3.7/site-packages/jinja2/_compat.py", line 31, in <module>
    import pickle
  File "/anaconda3/lib/python3.7/pickle.py", line 33, in <module>
    from struct import pack, unpack
  File "/anaconda3/lib/python3.7/struct.py", line 13, in <module>
    from _struct import *
ImportError: dlopen(/anaconda3/lib/python3.7/lib-dynload/_struct.cpython-37m-darwin.so, 2): Symbol not found: _PyByteArray_Type
  Referenced from: /anaconda3/lib/python3.7/lib-dynload/_struct.cpython-37m-darwin.so
  Expected in: flat namespace
 in /anaconda3/lib/python3.7/lib-dynload/_struct.cpython-37m-darwin.so
unable to load app 0 (mountpoint='') (callable not found or import error)


   *** no app loaded. going in full dynamic mode ***
   *** uWSGI is running in multiple interpreter mode ***
    spawned uWSGI worker 1 (pid: 53858, cores: 1)
    spawned uWSGI worker 2 (pid: 53859, cores: 1)
    spawned uWSGI worker 3 (pid: 53860, cores: 1)
    spawned uWSGI worker 4 (pid: 53861, cores: 1)

两个文件都位于系统的同一文件夹中;如何正确启动应用程序并接收多个并行请求?

python flask uwsgi
1个回答
0
投票

我已经尝试过重新创建您的情况,并且它按预期运行。这是我的uwsgi.ini文件:

[uwsgi]
socket = 192.168.1.219:8888
protocol = http
module = simple_app:app
threads = 1
processes = 4

这是simple_app.py文件:

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello():
    return "Hello World!"


if __name__ == '__main__':
    app.run()

并且我正在通过uwsgi uwsgi.ini命令启动uwsgi服务器。

我认为问题不在uwsgi或您的应用程序代码中,而是在Python或Flask / Jinja安装中。确保在蟒蛇环境中正确安装了Flask和Jinja。您可以尝试从头开始在主机上安装Python,或者尝试使用Docker和任何其他虚拟环境来隔离Python安装和安装在其上的模块。

© www.soinside.com 2019 - 2024. All rights reserved.