| r"""Utility classes & functions for data loading. Code in this folder is mostly |
| used by ../dataloder.py. |
| |
| A lot of multiprocessing is used in data loading, which only supports running |
| functions defined in global environment (py2 can't serialize static methods). |
| Therefore, for code tidiness we put these functions into different files in this |
| folder. |
| """ |
|
|
| import sys |
| import atexit |
|
|
| |
| from torch._utils import ExceptionWrapper |
|
|
|
|
| IS_WINDOWS = sys.platform == "win32" |
|
|
|
|
| MP_STATUS_CHECK_INTERVAL = 5.0 |
| r"""Interval (in seconds) to check status of processes to avoid hanging in |
| multiprocessing data loading. This is mainly used in getting data from |
| another process, in which case we need to periodically check whether the |
| sender is alive to prevent hanging.""" |
|
|
|
|
| python_exit_status = False |
| r"""Whether Python is shutting down. This flag is guaranteed to be set before |
| the Python core library resources are freed, but Python may already be exiting |
| for some time when this is set. |
| |
| Hook to set this flag is `_set_python_exit_flag`, and is inspired by a similar |
| hook in Python 3.7 multiprocessing library: |
| https://github.com/python/cpython/blob/d4d60134b29290049e28df54f23493de4f1824b6/Lib/multiprocessing/util.py#L277-L327 |
| """ |
|
|
|
|
| try: |
| import numpy |
| HAS_NUMPY = True |
| except ModuleNotFoundError: |
| HAS_NUMPY = False |
|
|
|
|
| def _set_python_exit_flag(): |
| global python_exit_status |
| python_exit_status = True |
|
|
| atexit.register(_set_python_exit_flag) |
|
|
|
|
| from . import worker, signal_handling, pin_memory, collate, fetch |
|
|