我们正在推出我们的下mod_wsgi的第一个Django应用程序django + mod_wsgi是否需要线程化编程?
`WSGIDaemonProcess our-appname processes=6 threads=15'`
而且我们有一个关于讨论是否我们的Python代码,它使用的需求是线程安全与否Redis的和Postgres库。
从我可以从阅读的mod_wsgi文档告诉,即使apache的工人正在处理与多个阿帕奇线程的请求,我们蟒蛇代码对所有意图和目的单线程的。我在mod_wsgi文档中没有看到任何警告:“小心!!您现在必须担心全局数据和线程安全!”但也没有明确的“不要担心线程没有任何”。
我们没有在python代码中明确地使用线程做任何事情,在我们写的任何东西中都没有提及它们。
但是这里有些人认为我们现在使用的是我们现在处于多线程世界的threads=15
。
任何人都可以澄清这里究竟发生了什么?我们的Python代码现在是否可以通过相同的数据执行多个执行线程?
对不起,但我发现你的词语非常混乱。 Python解释器本身是线程安全的,如果不是,那么它会在整个地方崩溃。 Python解释器的内部状态和引用计数的管理由GIL调解,就像你说的那样,并且确保在多线程中使用Python解释器是安全的。解释它的方式很糟糕。 gevent的gunicorn也没有多个线程。当使用gevent时,它们在技术上不是线程,虽然它看起来像线程。 –
现在线程安全的应用程序级代码的问题是一个不同的问题,但不要将它与Python解释器是否线程安全混淆。 –
在第一次计数时,我想这是真的,虽然我不确定将python解释器描述为对于python对象的内存操作同时不是线程安全的,而不是解释它是线程安全的因为GIL阻止线程执行上述操作。关于第二点,我同意; gevent使用技术上不是线程的“绿色线程” - 我应该解释这一点。 –