41

我安装了以皇帝模式运行的 uWSGI。Vassals 使用不同的 python 版本,所以我不能在 uWSGI 二进制文件中嵌入 Python 插件。

话虽如此,我想在其中一个 vassal 中使用 asyncio 循环引擎,但我不知道如何运行未嵌入的 asyncio 插件和 greenlet 插件。


到目前为止我已经尝试过:

  • 将 asyncio 和 greenlet 嵌入到 uWSGI 中,使用:

     CFLAGS="-I/usr/local/include/python3.4" make PYTHON=python3.4 asyncio
    

    构建uWSGI。但这也会嵌入 python 插件,我不想要它。

  • 使用以下命令将 asyncio 和 uWSGI 构建为外部插件:

     PYTHON=python3.4 ./uwsgi --build-plugin "plugins/greenlet greenlet"
     PYTHON=python3.4 ./uwsgi --build-plugin "plugins/greenlet greenlet"
    

    构建插件,但插件将无法加载:

    /usr/local/lib/uwsgi/asyncio_plugin.so:未定义符号:向上
    /usr/local/lib/uwsgi/greenlet_plugin.so:未定义符号:向上

    在日志中。

    //编辑
    我发现python插件必须在设置中的asyncio和greenlet之前启用,所以错误不再发生,但greenlet不起作用,当前greenlet中没有父级。

我还能尝试做什么?我敢打赌,在 python3.4 插件中嵌入 asyncio 和 greenlet 会起作用,但我不知道该怎么做,甚至不知道它是否可能。

目前我正在使用带有内置必需插件的第二皇帝,但由于平台限制,我不能再使用该解决方案。

4

1 回答 1

0

我相信您应该遵循此处概述的方法:https ://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#bonus-multiple-python-versions-for-the-same-uwsgi-binary

基本上:

  • 构建一个没有 Python 插件的核心 uwsgi 二进制文件(供皇帝使用):make PROFILE=nolang
  • 然后为您使用的每个 python 版本(对于vassal)构建插件,并配置每个vassal 以使用正确的插件。
于 2021-09-22T11:12:53.433 回答