首页 > 解决方案 > gunicorn 服务器在调用自身时挂起

问题描述

我有一个在 gunicorn 服务器上运行的 Django REST Framework 服务。这是配置的样子:

exec gunicorn \
        --pid /web/gunicorn.pid \
        --workers 4 \
        --threads 8 \
        --worker-class gthread \
        --name my-api \
        --chdir /src/api \
        --bind unix:/web/.sock \
        --timeout 300 \
        --limit-request-line 8190 \
        wsgi:application

我有两种看法:

def view1(request):
  # Call DB etc.

def view2(request):
  my_api_python_client.call_view1(request)  # Hangs!

这会导致请求无限期挂起。我知道从另一个视图调用一个视图听起来违反直觉,但必须这样做才能利用缓存、异步调用等。

奇怪的是,当我将它作为 Pycharm 服务器运行时,它运行得非常好!

问题 - 为什么我的请求从未得到处理?我如何解决它?

标签: pythondjangogunicorn

解决方案


你应该检查你的 gunicorn worker 的配置,它必须大于 1 才能运行一个会调用自己的线程。

例如:(2n+1 作为处理器数量)

gunicorn app.wsgi:application --workers=4 --bind 0.0.0.0:8000 

推荐阅读