我在 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/