1

我已经用 Apache 和 mod_wsgi 设置了一个 Linux 服务器。从我的 Apache 配置:

WSGIDaemonProcess myapp processes=1 threads=10

这里的 myapp 是一个 Django webapp。当 myapp 在 Django HttpRequest 对象中接收到来自 Apache 的大型 http POST 请求时,第一次访问发布的数据需要几秒钟的挂钟时间。我认为这是因为在从网络读取 POST 的完整主体之前调用了 myapp,并且访问 HttpRequest 对象中的已发布数据会阻塞,直到读取已发布的数据。

有没有办法在 Apache 读取所有发布的数据之前不调用 myapp ?

我问是因为我想将线程数(在本例中为 10)调整为最适合 myapp 中的并发处理。因此,我不想在这些请求中花费时间来等待接收来自网络的发布数据。

我知道我可能会将线程数增加到 10 个以上,并实施另一种机制来确保最多有 10 个线程同时处理。

4

1 回答 1

0

大有多大?

如果它非常大,那么如果在将其交给 Web 应用程序之前将其全部预读到内存中,那么您就有可能耗尽内存使用量。无论如何,在 Apache/mod_wsgi 中没有办法进行这样的预读。

在 Apache/mod_wsgi 前面使用 nginx 作为代理可以帮助将 Apache 与慢速 HTTP 客户端隔离开来,但 nginx 仅在代理最大 1MB 的请求内容之前进行预读取。允许对较大的请求内容大小进行预读取和缓冲,然后您必须担心前面提到的内存使用情况。

您可能应该做的是将这些特定的 URL 卸载到 nginx 以使用上传管理器进行处理。例如:

于 2013-08-12T12:55:07.787 回答