2012-01-28 2 views
0

파이썬 모듈 'import로드 시간/대기 시간을 측정하는 방법 AppEngine?AppEngine에서 파이썬 가져 오기로드 시간/대기 시간을 측정하는 방법

나는 그런보고 받고 싶은 : 내가 구현 한

module_name -> 1s 
... 

이/패치 sys.path_hooks__import__에 따라 몇 가지 솔루션을 테스트를하지만 순수 파이썬으로 작동하지만 AppEngine와.

AppEngine/Python 또는 Python에 대한 경험이있는 사람이라면 누구나 힌트를 제안 할 수 있습니까?

답변

0

App Engine에서 시간을 추적하는 해결책을 찾았습니다. 완전히 스레드 안전하지는 않습니다. 어떻게 생각하십니까?

module.py

# coding=utf-8 
## \authors Cezary K. Wagner 

from threading import Lock 

__indent = 0 
__patched = False 

def logImports(): 
    global __patched 
    if __patched == True: 
    return 

    import time 
    import logging 
# import inspect 
    import __builtin__ 

    original__import__ = __builtin__.__import__ 

    def patched__import__(name, *args): 
    global __indent 
    lock = Lock() 
    lock.acquire() 
    spaces = ' ' * (__indent * 2) 
# callerFrame = inspect.currentframe().f_back 
# moduleName = callerFrame.f_globals['__name__'] 
# lineNumber = callerFrame.f_lineno 
# logging.debug('%simport start %s %s:%s.' % (spaces, name, moduleName, lineNumber)) 
    __indent += 1 
    start = time.clock() 
    try: 
     module = original__import__(name, *args) 
     delta = time.clock() - start 
    # import could fail 
    finally: 
     lock.release 
     __indent -= 1 
    if delta >= 1.0: 
     logging.debug('%simport end %s in %ss' % (spaces, name, delta)) 
    return module 

    __builtin__.__import__ = patched__import__ 
    __patched = True 

usage.py

from module import logImports 
logImports() 

import math 
1

Google App Engine caches imports 그리고 이것은 아마도 path_hooks를 망칠 것입니다.
가져온 캐시는 일반적으로 프로덕션 환경에서 큰 문제를 일으키지 않습니다.

+0

문제는 그것이 원인이 될 수 부하와 대기 시간 ** 마감일은 60 시간 제한 때문에 ** 예외를 초과 - 당신이 경우 ** 말했듯 그것은 ** 빨리로드됩니다 - 문제는 로딩 대기 시간입니다. 많은 모듈을 사용하는 경우 각각의 모듈에서 게으른 캐싱 (필요하기 전에 데이터 준비)을 수행 할 수 있기 때문에 문제가 될 수 있습니다. – Chameleon

+0

여전히 로컬에서 테스트 할 수 있으며 로컬에서 수행 할 향상도 서버에 영향을 미칩니다. –

+0

시간은 돈이지만 결과는 프로덕션 서버와 다를 것입니다. – Chameleon

관련 문제