Skip to content

Commit 6d86d5e

Browse files
committed
Merge pull request #3741 from jenshnielsen/14_backend_testing
BLD : Add time out to looking up backends in setup.py Make sure that backend testing in multiprocessing is done with a timeout
2 parents d684890 + cbddb99 commit 6d86d5e

File tree

1 file changed

+41
-11
lines changed

1 file changed

+41
-11
lines changed

setupext.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import warnings
1414
from textwrap import fill
1515

16-
1716
PY3 = (sys.version_info[0] >= 3)
1817

1918

@@ -1788,16 +1787,26 @@ def check_requirements(self):
17881787
except:
17891788
return "unknown (can not use multiprocessing to determine)"
17901789
try:
1791-
success, msg = p.map(backend_gtk3agg_internal_check, [0])[0]
1790+
res = p.map_async(backend_gtk3agg_internal_check, [0])
1791+
success, msg = res.get(timeout=10)[0]
1792+
except multiprocessing.TimeoutError:
1793+
p.terminate()
1794+
# No result returned. Probaly hanging, terminate the process.
1795+
success = False
1796+
raise CheckFailed("Check timed out")
17921797
except:
1798+
p.close()
1799+
# Some other error.
17931800
success = False
17941801
msg = "Could not determine"
1795-
finally:
1802+
raise
1803+
else:
17961804
p.close()
1805+
finally:
17971806
p.join()
1807+
17981808
if success:
17991809
BackendAgg.force = True
1800-
18011810
return msg
18021811
else:
18031812
raise CheckFailed(msg)
@@ -1852,12 +1861,25 @@ def check_requirements(self):
18521861
p = multiprocessing.Pool()
18531862
except:
18541863
return "unknown (can not use multiprocessing to determine)"
1855-
success, msg = p.map(backend_gtk3cairo_internal_check, [0])[0]
1856-
p.close()
1857-
p.join()
1864+
try:
1865+
res = p.map_async(backend_gtk3cairo_internal_check, [0])
1866+
success, msg = res.get(timeout=10)[0]
1867+
except multiprocessing.TimeoutError:
1868+
p.terminate()
1869+
# No result returned. Probaly hanging, terminate the process.
1870+
success = False
1871+
raise CheckFailed("Check timed out")
1872+
except:
1873+
p.close()
1874+
success = False
1875+
raise
1876+
else:
1877+
p.close()
1878+
finally:
1879+
p.join()
1880+
18581881
if success:
18591882
BackendAgg.force = True
1860-
18611883
return msg
18621884
else:
18631885
raise CheckFailed(msg)
@@ -1988,13 +2010,21 @@ def check_requirements(self):
19882010
else:
19892011
# Multiprocessing OK
19902012
try:
1991-
msg = p.map(self.callback, [self])[0]
2013+
res = p.map_async(self.callback, [self])
2014+
msg = res.get(timeout=10)[0]
2015+
except multiprocessing.TimeoutError:
2016+
p.terminate()
2017+
# No result returned. Probaly hanging, terminate the process.
2018+
raise CheckFailed("Check timed out")
19922019
except:
1993-
# If we hit an error on multiprocessing raise it
2020+
# Some other error.
2021+
p.close()
19942022
raise
2023+
else:
2024+
# Clean exit
2025+
p.close()
19952026
finally:
19962027
# Tidy up multiprocessing
1997-
p.close()
19982028
p.join()
19992029

20002030
return msg

0 commit comments

Comments
 (0)