WSGI进程/线程标志和同步混淆

时间:2012-01-17 18:06:44

标签: apache mod-wsgi

我有一个简单的wsgi应用程序运行Apache prefork MPM,我一直在阅读modwsgi docs on processes and threads(真的很好读)。我仍然对一些事情以及需要同步的事情感到困惑。

/ 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 = true,wsgi.multithread = true]的形式进入,并且线程可能会踩到彼此的脚趾。这是我可能需要同步访问某些数据的位置。如果我的应用程序没有I / O,那还有什么需要同步?例如,是否需要在编辑时锁定类变量?是否需要锁定和释放多个线程调用的函数?这是我最困惑的。

由于 安吉洛

1 个答案:

答案 0 :(得分:0)

安吉洛, 就#1而言,你的想法似乎很可靠。

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