python - uWSGI + 构建 Go .so 不工作

标签 python django excel go uwsgi

问题:.so(共享对象)作为 python 中的库在 python 调用它时运行良好,但在运行 uWSGI 的 python(Django)应用程序中失败。

更多信息:我已经使用 go build -buildmode=c-shared -o output.so input.go 构建了 Go 模块,以便在 Python 中调用它

from ctypes import cdll

lib = cdll.LoadLibrary('path_to_library/output.so')

当通过 uWSGI 提供 django 项目时,调用 Go 库 的请求处理程序卡住,导致 Nginx 中的 future 504。在进入“所谓的卡住”后,uWSGI 被锁定在那里,只有重新启动才能帮助激活应用程序。完全没有日志!它只是卡住。

当我在同一台机器上运行 python 解释器时一切正常

我的想法:我已经尝试调试它并在库中放置了很多日志消息,但它不会提供太多信息,因为库的一切都很好(因为它在解释器中工作).库加载正确,因为我已将一些日志消息放入库中。我认为这是某种 uWSGI 限制。我不认为放置 uwsgi.ini 文件有什么帮助。

附加信息:

在这种类型的共享对象工作中,uWSGI 有哪些限制?是否有办法克服这些限制?

最佳答案

首先,您是否绝对肯定需要从 uWSGI 进程将 Go 作为库调用?

uWSGI 通常用于解释型语言,例如 PHP、Python、Ruby 等。它引导解释器并管理主/工作进程来处理请求。在 Go 库上使用它似乎很奇怪。

你提到了将 nginx 作为你的网络服务器,为什么不直接使用你的 Go 程序作为 http 服务器(它做得很好)并直接使用它的 URL 从 nginx 调用它:

location /name/ {
    proxy_pass http://127.0.0.1/go_url/;
}

See nginx docs.

如果你真的想通过 .so 模块将 Go 作为 python 导入的库使用,你必须知道 Go 有自己的运行时、线程管理,并且可能无法很好地与以不同方式处理线程/进程的 uWSGI 一起工作.在这种情况下,我无法帮助您,因为我从未实际尝试过。

如果您能澄清您的问题以及您实际打算做什么,我们可能会更有帮助地回答。

关于python - uWSGI + 构建 Go .so 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48753818/

相关文章:

除非指定了应用程序和特定的测试方法,否则 Django 不会使用 manage.py test 运行测试

sql-server - 从 EXCEL 更新 SQL SERVER 数据库

python - Pandas Python - value_counts() 或 idxmax() 每次返回不同的值

python - 带有 Django 的 matplotlib 在 print_figure 上失败,抛出 [Errno 2] 没有这样的文件或目录

python - 计算 1 天后出现 OpenCV 异常

vba - 在列表框vba中找到所选项目的行#

vba - 基于行 ID 的特定列标题的行数据

python - 我如何获得图像的原始分辨率,就像我在 python 之外正常打开它时一样

django - 在生产中无法本地化模型表单字段名称

python - 在 Django 模板中显示抓取的结果