2012-01-17 30 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