Kev*_* G. 5 python django mod-wsgi thread-safety
我们在mod_wsgi下推出了我们的第一个django应用程序
`WSGIDaemonProcess our-appname processes=6 threads=15'`
Run Code Online (Sandbox Code Playgroud)
我们正在讨论我们的Python代码以及它使用的Redis和Postgres库是否需要是线程安全的.
从我从阅读mod_wsgi文档中可以看出,即使apache worker正在处理具有多个apache线程的请求,我们的python代码也是用于单线程的所有意图和目的.我没有在mod_wsgi文档上看到任何警告"小心!!你现在必须担心全局数据和线程安全!" 但也没有明确的"不要担心线程没有任何问题".
我们在python代码中没有使用线程显式做任何事情,在我们编写的任何内容中都没有提到它们.
但是有些人认为,既然我们正在运行,threads=15那么我们现在处于多线程世界.
谁能澄清这里到底发生了什么?我们的Python代码现在是否通过相同的数据执行多个执行线程,而不是以前的代码?
是的,显然你正在运行多线程应用程序,如果你不关心全局变量,类属性等,它会产生问题
如果您需要保留全局内容,请将其保留在线程本地存储中.
以下是modwsgi doc,Building_A_Portable_Application的引用
3.应用程序必须是可重入的,或者简单地说,可以同时由多个线程同时调用.需要在请求生命周期中存在的数据需要存储为基于堆栈的数据,线程本地数据或缓存在WSGI应用程序环境中.实际应用程序模块中的全局变量不能用于此目的.
所以我认为你已经受到了足够的警告.