【问题标题】:ImportError from Flask App with Uwsgi: handle multiple parallel requests with Flask使用 Uwsgi 来自 Flask App 的 ImportError:使用 Flask 处理多个并行请求
【发布时间】:2020-04-14 16:15:50
【问题描述】:

我想使用 uWSGI 提供一个简单的 Flask 应用程序,以便拥有一个具有 4 个进程的简单 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

但是,当我尝试使用终端命令 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】:

    我已尝试重现您的情况,它按预期工作。 这是我的 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 安装。确保在 anaconda 环境中正确安装了 Flask 和 Jinja。您可以尝试在主机上从头开始安装 Python,或尝试使用 Docker 和任何其他虚拟环境来隔离 Python 安装和安装在其上的模块。

    【讨论】:

    • 如何检查安装?我尝试使用 pip 安装两者,但它报告安装成功消息
    • 很遗憾我不是Mac用户,但你可以尝试使用虚拟环境进行隔离或任何类型的虚拟机(VirtualBox、VMWare Player)。它会让您摆脱安装 Anaconda 时遇到的问题。或者您可以尝试删除 Anaconda 并尝试安装 vanilla Python (docs.python-guide.org/starting/install3/osx)。
    • 谢谢@Hett,我试试看;但是,在 Anaconda 中没有办法解决它吗?
    • 我没有使用 Anaconda 安装,这就是为什么它对我自己来说也是一种奇怪的行为。你可以浏览这个帖子,也许你会发现一些对你的案例有用的东西:stackoverflow.com/questions/50504279/spyder-startup-trouble。还有一个未答复的帖子,也许该用户以某种方式解决了他的问题,值得问他/她:stackoverflow.com/questions/59403521/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2023-03-09
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多