我有一个 Web 应用程序,它使用基于 nginx、uWSGI 和 Django 构建的 API。最近,我看到某个 API 调用上出现了很多 harakiris,它进行一些快速处理,然后生成一些线程来处理一些长时间运行的函数。然后主线程返回,工作线程将其结果存储在缓存中并退出。生成线程后,它们之间没有任何交互。
我的 uWSGI 设置为 20 秒切腹。这应该足够主线程完成并返回(平均大约 2-3 秒)。uWSGI 切腹可能是因为我的工作线程返回时间太长?如果是这样,我可以在 python 中使用多处理而不是多线程来解决这个问题吗?
谢谢!
答案1
这些选项对于弄清楚该功能到底发生了什么非常有用harakiri
:
harakiri-verbose=true
启用 harakiri 的详细模式
py-tracebacker=/path/to/socket
启用 uWSGI python tracebacker
从该套接字读取以查看回溯(uWSGI 方便地提供了一个--connect-and-read=/path/to/socket
选项)。
您还可以通过设置来调查请求后线程状态和日志诊断uwsgi.after_req_hook = callback
。在调用此方法之前,可以明确禁用 harakiri 模式:
harakiri-no-arh=true
不要在 after-request-hook 期间启用 harakiri