代码之家  ›  专栏  ›  技术社区  ›  noname7619

管理Django处理程序的线程

  •  0
  • noname7619  · 技术社区  · 9 年前

    是Web服务器生成/控制调用请求处理程序的线程(进程)吗?或者Django本身有异步/多线程体系结构吗?问题是,当一个(ajax)请求被处理很长时间,并且在这个客户端再次发送它的过程中,前一个处理程序被终止。我想对此进行一些控制:例如,执行一些清理操作。或者在某些情况下手动终止处理程序。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    Django不是一个web服务器,它是一个web框架,因此正如您所说,它生成线程来处理传入的请求,但web服务器的任务是接受并最终响应用户的[http(s)]请求。

    连接器 了解WSGI,因为这些人大多使用 古尼科恩 , , 修改wsgi 等等。您还需要将它们配置为接受更长的超时值。

    例如,如果您正在使用Nginx/Gunicorn,可以参考 this question 看看你如何设置超时。

    Celery 在这种情况下,它是一个非常方便的工具。

    在您的情况下,如果计算量不大,您可以简单地增加超时值。但是,如果您的计算可能需要很长时间,比如45秒以上,那么最好更改您的处理方式,并使用芹菜和请求的后台处理实现解决方案。

    编辑

    如果你想知道到底是谁在处理线程以及幕后发生了什么,我鼓励你阅读 this posting 关于Gunicorn,因为它对事物的工作方式有很好的洞察力。此外,在 design page of Gunicorn

    如果您的django线程更快超时(gunicorn超时),那么WSGI程序将终止该线程。另一方面,如果gunicorn的超时设置高于Nginx的超时,Nginx将终止线程。