django - 如何处理 mod_wsgi/django 中的阻塞 IO?

标签 django apache io mod-wsgi

我在 Apache+mod_wsgi 下以守护进程模式运行 Django,配置如下:

WSGIDaemonProcess myserver processes=2 threads=15

我的应用程序在后端执行一些 IO,这可能需要几秒钟。

def my_django_view:
    content=... # Do some processing on backend file
    return HttpResponse(content)

看来,如果我正在处理超过 2 个正在处理此类 IO 的 http 请求,Django 将简单地阻塞,直到前面的请求之一完成为止。

这是预期的行为吗?难道线程不应该帮助缓解这个问题吗?也就是说,在我看到这种等待之前,我不应该能够为给定的 WSGI 进程处理最多 15 个单独的请求吗?

或者我在这里遗漏了什么?

最佳答案

如果处理是在Python中进行的,则全局解释器锁不会被释放——在单个Python进程中,一次只能执行一个Python代码线程。不过,GIL 通常在 C 代码内部发布——例如,像大多数 I/O 一样。

如果这种处理会经常发生,您可能会考虑运行第二个“ worker ”应用程序作为守护程序,从数据库读取任务,执行操作并将结果写回数据库。 Apache 可能会决定终止响应时间过长的进程。

关于django - 如何处理 mod_wsgi/django 中的阻塞 IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551364/

相关文章:

apache - 优先级、HTML 和 PHP 索引文件

Java Web 启动 : How to write files to windows UNC Path?

windows - 为什么另一个线程中的阻塞 IO 会阻止 CreateWindowEx() 返回

Django 1.8 - migrate 和 makemigrations 之间有什么区别?

python - Django makemessage 命令不处理应用程序

python - 如何在文本框上方放置 django 字符字段的标签/描述

apache - 如何让我的 nextjs with Express 站点在 ssl 上工作

python - 在 Django 管理控制台中显示属性的勾号和十字图标

apache - 一个ant目标可以扩展多个扩展点吗?

python - 退格键似乎在 python 中不起作用