gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:06 25 4
gpt4 key购买 nike

问题:.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com