[Jack Jansen] > I spent the last couple of days hunting for the bug in MacPython > threaded import, but it turned out the bug is in the test harness. > (I did find another serious bug in the process, so the time wasn't > wasted, but still) Hmm! You originally said this test hung "about 30% of the time", and didn't respond when I asked how you ran it. Given the way you are running it, it should have hung 100% of the time. So something here is still muddy. > The problem is that test_threaded_import cannot run inside an > "import". It knows this, and so does regrtest, so they run the test > after the import by calling test_threaded_import.test_main(), which > does the actual test. > > All good and fine if you run regrtest as a main script from the > commandline, Or if you run test_threaded_import directly (leaving regrtest out of it). > but of course it breaks if you run autotest, So it does! I've never done that. > or if you "import regrtest" in an interactive window, Are you sure about that? Works fine for me, and should work fine. > because in these cases the import in the main thread > already holds the lock. It shouldn't hurt anything to import regrtest -- it's not until regrtest.main() gets invoked that a problem can occur. > I can simply add an "if not verbose", as in test_socketserver, > but that isn't really the problem. Does anyone know a better > solution? I don't like that either -- test_socketserver almost never gets run on my box simply because it's an oddball. For the same reason I'm sure the test_exceptions part of test_math never gets run on anyone's box. Assuming you were suffering an illusion when saying "import regrest in an interactive window" doesn't work, I'd be content to special-case the snot out of autotest, like so: Index: test_threaded_import.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_threaded_import.py,v retrieving revision 1.2 diff -c -r1.2 test_threaded_import.py *** test_threaded_import.py 2001/05/22 18:28:25 1.2 --- test_threaded_import.py 2001/08/29 18:53:38 *************** *** 6,12 **** # randrange, and then Python hangs. import thread ! from test_support import verbose critical_section = thread.allocate_lock() done = thread.allocate_lock() --- 6,12 ---- # randrange, and then Python hangs. import thread ! from test_support import verbose, TestSkipped critical_section = thread.allocate_lock() done = thread.allocate_lock() *************** *** 32,37 **** --- 32,41 ---- def test_main(): # magic name! see above global N, done + import sys + for modname in sys.modules: + if modname.find('autotest') >= 0: + raise TestSkipped("can't run from autotest") done.acquire() for N in (20, 50) * 3: if verbose:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4