【问题标题】:Running asyncio loop engine using external python plugin使用外部 python 插件运行 asyncio 循环引擎
【发布时间】:2016-03-24 22:29:38
【问题描述】:

我安装了一个以皇帝模式运行的 uWSGI。 Vassal 使用不同的 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:未定义符号:up
    /usr/local/lib/uwsgi/greenlet_plugin.so:未定义符号:向上

    在日志中。

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

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

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

【问题讨论】:

  • 我不明白你为什么在 synchronous uWSGI 中需要 asynchronous asyncio?
  • @AndrewSvetlov uWSGI 不仅是同步的。这可能会令人困惑,但 uWSGI 也可以处理异步应用程序,请参阅 this example in docs。我需要用于 websockets 的异步 uWSGI 服务器,就像在这种情况下一样,但我还需要来自 asyncio 的一些功能(主要是第三方库)(示例基于 gevent)。
  • 你也可以运行一个额外的 Emperor,并让他们监控不同的目录 - 我们这样做是为了在 Emperor 下运行 CPython 和 PyPy 应用程序,它们也是不兼容的。
  • @KonstantinLopuhin 实际上,您可以使用 uwsgi 二进制文件在一个皇帝中处理 CPython 和 PyPy,而无需内置 python 插件。这样一个vassal 就可以使用PyPy 插件和其他CPython。我的目标是使用 asyncio 实现这种行为,但还没有成功......
  • 我在 Python+cffi 中成功重写了 pypy 插件和 asyncio 事件循环,减去了一些细节。 github.com/unbit/uwsgi/pull/2170

标签: python-3.x uwsgi python-asyncio greenlets


【解决方案1】:

我认为您应该遵循此处概述的方法: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 以使用正确的插件。

【讨论】:

  • 是的,这就是我试图遵循的方法。问题出在其他地方:我无法为单个 vassal 指定 2 个插件,也无法找到将 python 和 greenlet 插件组合到一个插件中的方法。我已经摆脱了皇帝/附庸的方法,我正在使用由 systemd 管理的单独的 uWSGI 服务,但找到解决方案仍然很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多