Skip to content

Commit a5cda66

Browse files
Merge pull request #1128 from Backblaze/tqdm-closer-python-3.14
Disable _TqdmCloser darwin workaround for Python >= 3.14.2
2 parents f30ebf5 + 3f474ec commit a5cda66

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

b2/_internal/console_tool.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -923,8 +923,24 @@ def __enter__(self):
923923
return self
924924

925925
def __exit__(self, exc_type, exc_val, exc_tb):
926-
if sys.platform != 'darwin' or os.environ.get('B2_TEST_DISABLE_TQDM_CLOSER'):
926+
if (
927+
sys.platform != 'darwin'
928+
or sys.version_info < (3, 11)
929+
or os.environ.get('B2_TEST_DISABLE_TQDM_CLOSER')
930+
):
927931
return
932+
933+
# Tqdm sempaphore leaks do not seem to happen in MacOS 15.7.2,
934+
# so we can skip the workaround starting from this version
935+
try:
936+
macos_version = platform.mac_ver()[0]
937+
version_tuple = tuple(int(v) for v in macos_version.split('.'))
938+
except (KeyError, ValueError):
939+
pass
940+
else:
941+
if version_tuple and version_tuple >= (15, 7, 2):
942+
return
943+
928944
try:
929945
from multiprocessing.synchronize import SemLock
930946

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Disable Tqdm semaphore leak workaround for MacOS >= 15.7.2, as apparently it is no longer an issue in newer versions.

test/integration/test_tqdm_closer.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
# License https://www.backblaze.com/using_b2_code.html
88
#
99
######################################################################
10-
import re
1110
import sys
1211

1312
import pytest
1413

1514

1615
@pytest.mark.skipif(
17-
(sys.platform != 'darwin') or ((sys.version_info.major, sys.version_info.minor) < (3, 11)),
18-
reason='Tqdm closing error only occurs on OSX and python 3.11 or newer',
16+
(sys.platform != 'darwin'),
17+
reason='Tqdm closing error only occurs on OSX',
1918
)
2019
def test_tqdm_closer(b2_tool, bucket, file_name):
2120
# test that stderr doesn't contain any warning, in particular warnings about multiprocessing resource tracker
@@ -27,18 +26,3 @@ def test_tqdm_closer(b2_tool, bucket, file_name):
2726
f'b2://{bucket.name}/{file_name}',
2827
]
2928
)
30-
31-
# test that disabling _TqdmCloser does produce a resource tracker warning. Should the following check ever fail,
32-
# that would mean that either Tqdm or python fixed the issue and _TqdmCloser can be disabled for fixed versions
33-
b2_tool.should_succeed(
34-
[
35-
'file',
36-
'cat',
37-
f'b2://{bucket.name}/{file_name}',
38-
],
39-
additional_env={'B2_TEST_DISABLE_TQDM_CLOSER': '1'},
40-
expected_stderr_pattern=re.compile(
41-
r'UserWarning: resource_tracker: There appear to be \d+ leaked semaphore'
42-
r' objects to clean up at shutdown'
43-
),
44-
)

0 commit comments

Comments
 (0)