WSGIDaemonProcess <user> processes=5 threads=1 python-home=/path/to
WSGIProcessGroup <user>
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIApplicationGroup %{GLOBAL}我的应用程序使用Gdal,这不是线程安全。文档建议在threads=1中使用wsgi。如果apache配置使用线程化的mpm-worker,那么threads=1会保证线程安全吗?
Apache设置:
KeepAlive Off
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 5
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5对已接受的答案的补充报价如下:
StartServers 2
ThreadsPerChild 25
WSGIDaemonProcess processes=1 threads=15在WSGI应用程序中,Apache子工作进程仅充当代理,将请求转发到mod_wsgi守护进程模式进程(Es)进行处理。 因此,对于2个Apache子工作进程,最大连接数为50个(每个进程有25个线程)。这些Apache子工作进程接受静态文件请求和动态请求的连接,然后代理到mod_wsgi守护进程模式进程。只有一个mod_wsgi守护进程模式进程,WSGI应用程序本身将能够处理15个并发请求。 如果存在由mod_wsgi守护进程模式进程处理的请求,因为Apache子工作进程正在代理请求和响应,则在Apache子工作进程中的请求生命周期中仍然会使用一个线程。Apache子工作进程中的35个(50-15)额外线程仍可用于处理静态请求、保持活动连接和充当针对WSGI应用程序的挂起的动态请求的缓冲机制。后者对于速度慢的客户端特别有用,因为Apache子工作进程在获得完整的请求信息之前不会将请求转发到mod_wsgi守护进程。 请注意,仅仅因为mod_wsgi守护进程模式只能处理15个并发请求,并不意味着它只能每秒处理那么多请求。每秒有多少请求将由应用程序的速度和共享资源上的争用决定。后者对是否需要序列化操作有影响。 总的来说,只需将mod_wsgi守护进程模式想象为类似于在单独的后端web服务器前使用mod_proxy。不过,在这种情况下,mod_wsgi已经创建了守护进程,并代表您管理它们。 格雷厄姆·邓普顿
发布于 2018-03-16 20:34:37
当使用mod_wsgi守护进程模式时,Python请求是在与Apache子工作进程分开的进程中处理的,所以是的,在这种情况下,使用threads=1将保证线程安全。
有关mod_wsgi中进程和线程工作方式的更多信息,请参阅有关它的文档:
你也可以观看:
https://stackoverflow.com/questions/49326592
复制相似问题