我有一個簡單的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