我有一个简单的wsgi应用程序与Apache prefork MPM运行,我一直在阅读modwsgi docs on processes and threads(真的很好的阅读)。我仍然对一些事情感到困惑,什么需要同步。WSGI进程/线程标志和同步混淆
/1如果我的Apache配置仅仅是一个简单的WSGIScriptAlias我WSGI的应用程序是这样的:
WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi
,并假设prefork的MPM的Apache建立,那么WSGI线程和进程的标志都像这样[ wsgi.multiprocess = True,wsgi.multithread = False]。我明白这意味着单个进程(无线程)正在处理每个请求。在这些术语中,我不需要同步任何东西,因为我在进程之间没有进行任何IPC,每个进程都有自己的地址空间。这是正确的想法吗?然而
/2如果使用我的Apache配置WSGIDaemonPrcoesses:
WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi
WSGIDaemonProcess wsgi_proc_names processes=2 threads=2
WSGIProcessGroup wsgi_proc_names
则WSGI标志进来作为[wsgi.multiprocess =真,wsgi.multithread =真]并且存在这样的可能性:所述线程可能踩在对方的脚趾上。这里是我可能需要同步访问某些数据的地方。如果我的应用程序没有I/O,那么还有什么需要同步?例如,在编辑时是否需要锁定类变量?被多个线程调用的函数是否需要被锁定和释放?这是我最困惑的。
感谢 安杰洛
感谢您的回复...最后一个答复。你有没有看到马兹塔兹的例子? – angeloHarpy 2012-02-15 17:37:31
我不在眼前,但也许我可以在一天结束的时候给你一些东西 – maztaz 2012-02-15 17:40:30