diff --git a/hexrdgui/ignore_warnings.py b/hexrdgui/ignore_warnings.py new file mode 100644 index 000000000..3d909daa7 --- /dev/null +++ b/hexrdgui/ignore_warnings.py @@ -0,0 +1,20 @@ +"""Suppress known harmless warnings. Call apply() early in main.py.""" + +import os +import warnings + + +def apply(): + # Suppress harmless leaked semaphore warning from loky at shutdown. + # The resource_tracker runs as a separate daemon process, so + # warnings.filterwarnings only covers the main process. We also + # set PYTHONWARNINGS so the filter propagates to the tracker. + warnings.filterwarnings( + 'ignore', + message=r'resource_tracker:.*leaked semaphore', + category=UserWarning, + ) + _pw = os.environ.get('PYTHONWARNINGS', '') + _filter = 'ignore:resource_tracker:UserWarning' + if _filter not in _pw: + os.environ['PYTHONWARNINGS'] = f'{_pw},{_filter}' if _pw else _filter diff --git a/hexrdgui/main.py b/hexrdgui/main.py index 283b8438a..9b9fb707e 100644 --- a/hexrdgui/main.py +++ b/hexrdgui/main.py @@ -1,17 +1,14 @@ +# Must be first - sets env vars before any child processes are spawned +from hexrdgui.ignore_warnings import apply as apply_warning_filters + +apply_warning_filters() + import argparse import atexit import gc import os import signal import sys -import warnings - -# Suppress harmless leaked semaphore warning from loky at shutdown -warnings.filterwarnings( - 'ignore', - message=r'resource_tracker:.*leaked semaphore', - category=UserWarning, -) if sys.platform.startswith('darwin'): # Prevent crashing when using OpenBLAS