【问题标题】:Multi-threading under Apache resulting in duplicate threadsApache下的多线程导致重复线程
【发布时间】:2012-06-17 07:40:29
【问题描述】:

我在 Apache2 下运行一个 python 线程池来处理传入的特殊 HTTP 请求。

我的想法是每个请求源都有一个“处理程序”线程 - 所以如果我有三个设备(A、B、C)向我发送这些特殊请求,每个设备在服务器上都有自己的“处理程序”线程(1-A, 2-B, 3-C)

我有一个这样定义的线程池类:

class threadController(threading.Thread)
   threadPool = []

当我收到一个新请求时,我会查看所有正在运行的线程,以匹配一个特定的线程,然后将请求传递给它。

这似乎在 Windows 下运行良好。

但是,在 Linux 上,似乎有时我的 threadPool 变量返回为空,并且我得到了一个额外的线程。所以我有一个设备(A)发送请求,但最终有两个线程(1-A 和 2-A)。

奇怪的是:它总是一个额外的线程,永远不会更多。无论我的设备 (A) 发送 5 个请求还是 30 个请求。

我正在使用 mod_wsgi (3.3) 进行 django 集成。

注意:我意识到这是一种处理会话的非正统方式。我不是在寻找更好地处理会话的方法 - 我已经知道有更好的方法:)

【问题讨论】:

    标签: python django multithreading apache2 threadpool


    【解决方案1】:

    在 Windows 上只有一个 Apache 子进程处理请求。在非 Windows 系统上,如果使用嵌入式模式,则可以有多个进程。

    使用 mod_wsgi 守护进程及其默认的单个进程。见:

    http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process

    和:

    http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

    【讨论】:

    • 是的,这正是问题所在,MPM 不同。我根据您的第二个链接调整了 apache 设置,它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2018-08-28
    • 1970-01-01
    相关资源
    最近更新 更多