Python(WSGI):获取每个请求的峰值内存使用率

Python(WSGI):获取每个请求的峰值内存使用率,python,memory,thread-safety,mod-wsgi,wsgi,Python,Memory,Thread Safety,Mod Wsgi,Wsgi,我正在为我的Python应用程序使用WSGI守护进程,在尝试使用资源模块获取每个请求的内存使用情况时遇到问题 如果使用CGI,它将按我所希望的那样工作,但是使用WSGI,内存使用计数将在请求之间共享。我相信这与线程有关,因为WSGI生成进程&线程与使用CGI时不同,CGI只是为每个请求生成一个新进程 下面是一个WSGI Python应用程序的最小示例,可以获得example.com/a和example.com/b的最高内存使用率: def application(environ, start_r

我正在为我的Python应用程序使用WSGI守护进程,在尝试使用
资源
模块获取每个请求的内存使用情况时遇到问题

如果使用CGI,它将按我所希望的那样工作,但是使用WSGI,内存使用计数将在请求之间共享。我相信这与线程有关,因为WSGI生成进程&线程与使用CGI时不同,CGI只是为每个请求生成一个新进程

下面是一个WSGI Python应用程序的最小示例,可以获得
example.com/a
example.com/b
的最高内存使用率:

def application(environ, start_response):

    if environ['REQUEST_URI'] == '/a':
        pass

    elif environ['REQUEST_URI'] == '/b':

        # Use lots of memory
        x = ''
        for _i in range(0, 30000):
            x += ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
                  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')

    # Show peak memory used
    # https://stackoverflow.com/questions/938733/total-memory-used-by-python-process#answer-7669482
    import resource
    mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    content = str(mem)

    status = '200 OK'
    header = [('Content-type', 'text/html; charset=utf-8')]
    start_response(status, header)
    content = content.encode('utf-8')
    return [content]
如果我访问
example.com/a
,内存使用情况将显示
~30008

如果我访问
example.com/b
内存使用情况将显示
~47984

但是如果我再次访问
example.com/a
(在访问
example.com/b
之后),它将显示
~47984
,而不是
~3008

我希望对上述代码执行的操作是:
example.com/a
始终显示
~30008

example.com/b
始终显示
~47984


非常感谢您的帮助。

您需要的不是内存管理的工作方式。Tou不应该期望工作进程的内存使用率下降。我不是想说“期望”,我不确定WSGI是如何工作的,我是想说“我希望发生什么”。我知道你的意思,这不会发生。