U  g].@sdZddlZddlZddlZddlZeejejejej ej ej ej ej ejejd Zedddddd d d d d d Zd*ddZGdddeZd+ddZdZeddddddddddd d!d"d#d$d%dZGd&d'd'eZGd(d)d)eZeZdS),ag!This module allows querying resource usage and limits, as well as setting resource limits. It is a wrapper around the Python resource module. Setting resource limits: @code use logging, produtil.rusage logger=logging.logger("rusage") produtil.rusage.setrlimit(logger,data=1e9,nofile=500,aspace=2e9,stack=5e8) @endcode Printing resource limits to a logger: @code use logging, produtil.rusage logger=logging.logger("rusage") u.produtil.rusage.getrlimit(logger) # writes the limits to the logger # Limits are also in the returned object "u" # Send None instead of logger to avoid logging. @endcode N) coreZcpufsizedatastackZrssZnprocZnofileZmemlockZaspacezcore file sizez cpu usagezmax. file sizezmax. heap sizezmax. stack sizezmax. resident set sizezmax. processeszmax. open fileszmax. locked memoryzmax. address spaceFc Ks|dkrtd}|D]\}}z`tt|\}}|rB||}||}|dk rl|d|t|||ftt|||fWqtj t t t t fk r}z,|dk r|jd|t|fdd|sȂW5d}~XYqXqdS)a!Sets resource limits. @param ignore If ignore=True, ignores any errors from getrlimit or setrlimit. @param hard If hard=True, attempts to set hard limits, which generally requires administrator privileges. @param logger The logger argument sets the logger (default: produtil.setrlimit logging domain). @param kwargs The kwargs should be a list of resource limits. Accepted resource limits: * core = core file size (RLIMIT_CORE) * cpu = max. cpu usage (RLIMIT_CPU) * fsize = max. file size (RLIMIT_FSIZE) * data = max. heap size (RLIMIT_DATA) * stack = max. stack size (RLIMIT_STACK) * rss = max. resident set size (RLIMIT_RSS) * nproc = max. processes (RLIMIT_NPROC) * nofile = max. open files (RLIMIT_NOFILE or RLIMIT_OFILE) * memlock= max locked memory (RLIMIT_MEMLOCK) * aspace = max. address space (RLIMIT_AS) See "man setrlimit" for details.Nzprodutil.setrlimitz"Requesting %s (%s) soft=%s hard=%sz%s: cannot set limit: %sTexc_info)logging getLoggeritemsresource getrlimitrtypemapinfornamemap setrlimiterrorEnvironmentError ValueError TypeErrorKeyErrorwarningstr) loggerignorehardkwargskvZsoftLZhardLerr*r+r8r9Z RUsageNotRunr;r: rusage_keyshasattrr,rusage_meaningsgetattrr-)r$sbadtrrrr rFs    z RUsage.reportcCs4|jdks|jdkrdS|jdkr*||jSdS)z:!Generates a string report of the resource usage utilized.Nz(uninitialized RUsage report))r8r9r>rFr@rrr r/s  zRUsage.__str__)r0r1r2r3r ZRUSAGE_CHILDRENr(propertyr?rArErJrFr/rrrr r7s   r7)NFF)N)r3r rr*rDdictZ RLIMIT_COREZ RLIMIT_CPUZ RLIMIT_FSIZEZ RLIMIT_DATAZ RLIMIT_STACKZ RLIMIT_RSSZ RLIMIT_NPROCZ RLIMIT_NOFILEZRLIMIT_MEMLOCKZ RLIMIT_ASr rrobjectr!r rKrM Exceptionr6r7rusagerrrr s`  &" q