Как измерить время / задержки загрузки Python в AppEngine - PullRequest
0 голосов
/ 28 января 2012

Как измерить import время загрузки / задержки модулей Python в AppEngine?

Я хочу получить такой отчет:

module_name -> 1s
...

Я реализовал / протестировал некоторые решения, основанные на sys.path_hooks и __import__ исправлениях, но он работает с чистым Python, но не с AppEngine.

Может ли кто-нибудь с опытом работы в AppEngine / Python или чистом Python предложить / поделиться какой-нибудь подсказкой?

Ответы [ 2 ]

1 голос
/ 28 января 2012

Кэши Google App Engine импортируют , и это, вероятно, приводит к путанице в path_hooks.
Поскольку импортируемые кеши являются кешами, они обычно не вызывают серьезных проблем в производственной среде.

0 голосов
/ 29 января 2012

Я нашел такое решение для отслеживания времени в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...