django Nginx被长轮询请求阻塞

xdyibdwo  于 2023-05-23  发布在  Go
关注(0)|答案(1)|浏览(136)

在我的项目中,我有Nginx,Django和jQuery。我使用JQuery post请求来调用Django函数,有时需要一段时间才能完成。
问题是,当我在post中使用async/await函数时,它会完全阻止Nginx,直到任务完成。我甚至无法在另一台计算机上打开新选项卡或打开项目
我该怎么弥补?还是应该用celery 代替?
JS函数示例:

async function very_long_function(params) {
    // some code
    await $.post(post_params).done(function (data) {
        // some code with data Django returned
    })
    // some code that has to be after
}

nginx.conf文件:

user  nginx;
worker_processes 16;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request"'
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65s;

    include /etc/nginx/conf.d/*.conf;
}
h7wcgrx3

h7wcgrx31#

原来问题不在Nginx,而是在我用于Django的Gunicorn。看起来Nginx配置很好,但在后端,我默认只有一个同步工人。所以我在Gunicorn启动脚本中添加了--workers 4 --worker-class gevent,现在它可以工作了
别重蹈我的覆辙

相关问题