File: logging.py

package info (click to toggle)
python-anndata 0.7.5%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 628 kB
  • sloc: python: 7,779; makefile: 8
file content (51 lines) | stat: -rw-r--r-- 1,463 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import os
import logging

_previous_memory_usage = None

anndata_logger = logging.getLogger("anndata")
# Don’t pass log messages on to logging.root and its handler
anndata_logger.propagate = False
anndata_logger.setLevel("INFO")
anndata_logger.addHandler(logging.StreamHandler())  # Logs go to stderr
anndata_logger.handlers[-1].setFormatter(logging.Formatter("%(message)s"))
anndata_logger.handlers[-1].setLevel("INFO")


def get_logger(name):
    """\
    Creates a child logger that delegates to anndata_logger
    instead to logging.root
    """
    return anndata_logger.manager.getLogger(name)


def get_memory_usage():
    import psutil

    process = psutil.Process(os.getpid())
    try:
        meminfo = process.memory_info()
    except AttributeError:
        meminfo = process.get_memory_info()
    mem = meminfo[0] / 2 ** 30  # output in GB
    mem_diff = mem
    global _previous_memory_usage
    if _previous_memory_usage is not None:
        mem_diff = mem - _previous_memory_usage
    _previous_memory_usage = mem
    return mem, mem_diff


def format_memory_usage(mem_usage, msg="", newline=False):
    newline = "\n" if newline else ""
    more = " \n... " if msg != "" else ""
    mem, diff = mem_usage
    return (
        f"{newline}{msg}{more}"
        f"Memory usage: current {mem:.2f} GB, difference {diff:+.2f} GB"
    )


def print_memory_usage(msg="", newline=False):
    print(format_memory_usage(get_memory_usage(), msg, newline))