⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 core.py.svn-base

📁 moses开源的机器翻译系统
💻 SVN-BASE
字号:
############################################################################ #  Psyco main functions.#   Copyright (C) 2001-2002  Armin Rigo et.al."""Psyco main functions.Here are the routines that you can use from your applications.These are mostly interfaces to the C core, but they depend onthe Python version.You can use these functions from the 'psyco' module instead of'psyco.core', e.g.    import psyco    psyco.log('/tmp/psyco.log')    psyco.profile()"""###########################################################################import _psycoimport types, newfrom support import *# Default charge profiler valuesdefault_watermark     = 0.09     # between 0.0 (0%) and 1.0 (100%)default_halflife      = 0.5      # secondsdefault_pollfreq_profile    = 20       # Hzdefault_pollfreq_background = 100      # Hz -- a maximum for sleep's resolutiondefault_parentframe   = 0.25     # should not be more than 0.5 (50%)def full(memory=None, time=None, memorymax=None, timemax=None):    """Compile as much as possible.Typical use is for small scripts performing intensive computationsor string handling."""    import profiler    if PYTHON_SUPPORT:        p = profiler.FullCompiler()    else:        p = profiler.ActiveProfiler(0.0, 0.5)    p.run(memory, time, memorymax, timemax)def profile(watermark   = default_watermark,            halflife    = default_halflife,            pollfreq    = default_pollfreq_profile,            parentframe = default_parentframe,            memory=None, time=None, memorymax=None, timemax=None):    """Turn on profiling.The 'watermark' parameter controls how easily running functions willbe compiled. The smaller the value, the more functions are compiled."""    import profiler    p = profiler.ActivePassiveProfiler(watermark, halflife,                                       pollfreq, parentframe)    p.run(memory, time, memorymax, timemax)def background(watermark   = default_watermark,               halflife    = default_halflife,               pollfreq    = default_pollfreq_background,               parentframe = default_parentframe,               memory=None, time=None, memorymax=None, timemax=None):    """Turn on passive profiling.This is a very lightweight mode in which only intensively computingfunctions can be detected. The smaller the 'watermark', the more functionsare compiled."""    import profiler    p = profiler.PassiveProfiler(watermark, halflife, pollfreq, parentframe)    p.run(memory, time, memorymax, timemax)def runonly(memory=None, time=None, memorymax=None, timemax=None):    """Nonprofiler.XXX check if this is useful and document."""    if PYTHON_SUPPORT:        import profiler        p = profiler.RunOnly()        p.run(memory, time, memorymax, timemax)def stop():    """Turn off all automatic compilation.  bind() calls remain in effect."""    import profiler    profiler.go([])def log(logfile='', mode='w', top=10):    """Enable logging to the given file.If the file name is unspecified, a default name is built by appendinga 'log-psyco' extension to the main script name.Mode is 'a' to append to a possibly existing file or 'w' to overwritean existing file. Note that the log file may grow quickly in 'a' mode."""    import profiler, logger    if not logfile:        import os        logfile, dummy = os.path.splitext(sys.argv[0])        if os.path.basename(logfile):            logfile += '.'        logfile += 'log-psyco'    if hasattr(_psyco, 'VERBOSE_LEVEL'):        print >> sys.stderr, 'psyco: logging to', logfile    # logger.current should be a real file object; subtle problems    # will show up if its write() and flush() methods are written    # in Python, as Psyco will invoke them while compiling.    logger.current = open(logfile, mode)    logger.print_charges = top    profiler.logger = logger    logger.writedate('Logging started')    cannotcompile(logger.psycowrite)    _psyco.statwrite(logger=logger.psycowrite)def bind(x, rec=None):    """Enable compilation of the given function, method, or class object.If C is a class (or anything with a '__dict__' attribute), bind(C) willrebind all functions and methods found in C.__dict__ (which means, forclasses, all methods defined in the class but not in its parents).The optional second argument specifies the number of recursivecompilation levels: all functions called by func are compiledup to the given depth of indirection."""    if isinstance(x, types.MethodType):        x = x.im_func    if isinstance(x, types.FunctionType):        if rec is None:            x.func_code = _psyco.proxycode(x)        else:            x.func_code = _psyco.proxycode(x, rec)        return    if hasattr(x, '__dict__'):        funcs = [o for o in x.__dict__.values()                 if isinstance(o, types.MethodType)                 or isinstance(o, types.FunctionType)]        if not funcs:            raise error, ("nothing bindable found in %s object" %                          type(x).__name__)        for o in funcs:            bind(o, rec)        return    raise TypeError, "cannot bind %s objects" % type(x).__name__def unbind(x):    """Reverse of bind()."""    if isinstance(x, types.MethodType):        x = x.im_func    if isinstance(x, types.FunctionType):        try:            f = _psyco.unproxycode(x.func_code)        except error:            pass        else:            x.func_code = f.func_code        return    if hasattr(x, '__dict__'):        for o in x.__dict__.values():            if (isinstance(o, types.MethodType)             or isinstance(o, types.FunctionType)):                unbind(o)        return    raise TypeError, "cannot unbind %s objects" % type(x).__name__def proxy(x, rec=None):    """Return a Psyco-enabled copy of the function.The original function is still available for non-compiled calls.The optional second argument specifies the number of recursivecompilation levels: all functions called by func are compiledup to the given depth of indirection."""    if isinstance(x, types.FunctionType):        if rec is None:            code = _psyco.proxycode(x)        else:            code = _psyco.proxycode(x, rec)        return new.function(code, x.func_globals, x.func_name)    if isinstance(x, types.MethodType):        p = proxy(x.im_func, rec)        return new.instancemethod(p, x.im_self, x.im_class)    raise TypeError, "cannot proxy %s objects" % type(x).__name__def unproxy(proxy):    """Return a new copy of the original function of method behind a proxy.The result behaves like the original function in that calling itdoes not trigger compilation nor execution of any compiled code."""    if isinstance(proxy, types.FunctionType):        return _psyco.unproxycode(proxy.func_code)    if isinstance(proxy, types.MethodType):        f = unproxy(proxy.im_func)        return new.instancemethod(f, proxy.im_self, proxy.im_class)    raise TypeError, "%s objects cannot be proxies" % type(proxy).__name__def cannotcompile(x):    """Instruct Psyco never to compile the given function, methodor code object."""    if isinstance(x, types.MethodType):        x = x.im_func    if isinstance(x, types.FunctionType):        x = x.func_code    if isinstance(x, types.CodeType):        _psyco.cannotcompile(x)    else:        raise TypeError, "unexpected %s object" % type(x).__name__def dumpcodebuf():    """Write in file psyco.dump a copy of the emitted machine code,provided Psyco was compiled with a non-zero CODE_DUMP.See py-utils/httpxam.py to examine psyco.dump."""    if hasattr(_psyco, 'dumpcodebuf'):        _psyco.dumpcodebuf()############################################################################ Psyco variables#   error         * the error raised by Psyco#   warning       * the warning raised by Psyco#   __in_psyco__  * a new built-in variable which is always zero, but which#                     Psyco special-cases by returning 1 instead. So#                     __in_psyco__ can be used in a function to know if#                     that function is being executed by Psyco or not.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -