【问题标题】:WSGI Process/Thread Flags and Synchronization ConfusionWSGI 进程/线程标志和同步混乱
【发布时间】:2012-01-17 18:06:44
【问题描述】:

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

/1 如果我的 Apache 配置对于我的 wsgi 应用程序来说只是一个简单的 WSGIScriptAlias,如下所示:

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

谢谢 安杰洛

【问题讨论】:

    标签: apache mod-wsgi


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复……终于有回复了。你有什么我看到 maztaz 的例子吗?
    • 我手头没有,但也许我能在一天结束之前给你一些东西
    猜你喜欢
    • 2016-10-05
    • 2019-08-22
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多