2012-01-17 43 views
0

我有一个简单的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,那么还有什么需要同步?例如,在编辑时是否需要锁定类变量?被多个线程调用的函数是否需要被锁定和释放?这是我最困惑的。

感谢 安杰洛

回答

0

安杰洛, 至于#1变为你的思维似乎固体。

你的第二个问题(#2)有点棘手。但据我所知,你需要锁定I/O(所以你的情况没有)。每个线程应该有它自己的调用堆栈,所以我不认为你需要锁定函数。唯一可能需要锁定的是全局变量。但是你没有提到你会使用这些。

+0

感谢您的回复...最后一个答复。你有没有看到马兹塔兹的例子? – angeloHarpy 2012-02-15 17:37:31

+0

我不在眼前,但也许我可以在一天结束的时候给你一些东西 – maztaz 2012-02-15 17:40:30