我对mod_wsgi的多进程特性有点困惑,并且对能够在具备多进程能力的WSGI服务器上执行的WSGI应用程序的一般设计也感到困惑。
考虑以下指令:
WSGIDaemonProcess example processes=5 threads=1
如果我理解正确,mod_wsgi将产生5个Python(例如CPython)进程,并且任何一个进程都可以接收用户的请求。文档说:
“当共享数据需要对所有应用程序实例可见时,无论它们在哪个子进程中执行,以及由一个应用程序所做的更改立即对另一个应用程序可用时(包括在另一个子进程中执行的任何应用程序),必须使用外部数据存储,例如数据库或共享内存。普通Python模块中的全局变量不能用于此目的。”
但在这种情况下,如果想确保应用程序在任何WSGI条件下运行(包括多进程条件下),那么工作量就会非常大。
例如,一个包含当前连接用户数量的简单变量 - 应该从memcached安全地读取/写入,还是从数据库或(如果有这样的标准库机制)共享内存?
而像这样的代码:
counter = 0
@app.route('/login')
def login():
...
counter += 1
...
@app.route('/logout')
def logout():
...
counter -= 1
...
@app.route('/show_users_count')
def show_users_count():
return counter
在多进程环境下表现不可预测?
谢谢!
a
的描述符。问题是关于多进程,而不是多线程。 - Zaur Nasibov