为什么这个装饰器被调用了这么多次?

时间:2014-11-21 16:26:55

标签: python

我有以下装饰者:

@acceptable_methods('POST')
def deposit_funds(request, user=None):
    # do something

这是装饰器代码:

def acceptable_methods(*args):
    """
    Enforce that the necessary method has been called.

    """
    valid_methods = args
    print '11111'

    def _method_wrapper(view_function):
        print '22222'

        def _arguments_wrapper(*args, **kwargs):
            print '33333'
            if args[0].META.get('REQUEST_METHOD') not in valid_methods:
                return JsonRestResponse(None, success=False, error="This is not an acceptable method", status_code=FORBIDDEN_METHOD)
            return view_function(*args, **kwargs)

        return _arguments_wrapper

    return _method_wrapper

由于一些非常严重的原因,它似乎在两个外包装上运行了16次。这是打印声明:

[21/Nov/2014 16:26:57] "POST /api/v1.0/bonuses/grant HTTP/1.1" 500 124805
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
11111
22222
[21/Nov/2014 16:27:13] "POST /api/v1.0/bonuses/grant HTTP/1.1" 500 66364

每个print语句都具有相同的os.pid()。 为什么会这样?为什么根本不调用最内层的方法?

1 个答案:

答案 0 :(得分:3)

您的WSGI服务器创建了16个子进程,并且每个进程都单独运行Python。