[Python-bugs-list] [Bug #110675] Pth: test_fork1 fails, test_thread slow (PR#383)
noreply@sourceforge.net
noreply@sourceforge.net
Fri, 15 Sep 2000 11:06:13 -0700
Bug #110675, was updated on 2000-Jul-31 14:13
Here is a current snapshot of the bug.
Project: Python
Category: Core
Status: Closed
Resolution: Wont Fix
Bug Group: 3rd Party
Priority: 1
Summary: Pth: test_fork1 fails, test_thread slow (PR#383)
Details: Jitterbug-Id: 383
Submitted-By: gregor@hoffleit.de
Date: Tue, 4 Jul 2000 12:07:06 -0400 (EDT)
Version: CVS version (06/04/00)
OS: Debian potato (i386)
When I use the current CVS version of Python to build on a Debian potato
system with GNU Pth 1.2.3 installed, test_fork1 fails with an error (see
below),
and test_thread takes significantly longer to complete than when I build the
same sources with native LinuxThreads.
When running test.regrtest.main(), this happens:
clapton:3> LD_LIBRARY_PATH=`pwd` ./python
Python 2.0b1 (#0, Jul 4 2000, 17:06:15) [GCC 2.95.2 20000220 (Debian
GNU/Linux)] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)
>>> from test import regrtest
>>> regrtest.main()
test_grammar
test_opcodes
...
test_extcall
test_fcntl
test_fork1
test test_fork1 crashed -- exceptions.AssertionError :
Unhandled exception in thread:
Traceback (most recent call last):
File "./Lib/test/test_fork1.py", line 30, in f
alive[id] = os.getpid()
AttributeError: 'None' object has no attribute 'getpid'
Unhandled exception in thread:
Traceback (most recent call last):
File "./Lib/test/test_fork1.py", line 32, in f time.sleep(SHORTSLEEP)
TypeError: illegal argument type for built-in operation
Unhandled exception in thread:
Traceback (most recent call last):
File "./Lib/test/test_fork1.py", line 30, in f
alive[id] = os.getpid()
AttributeError: 'None' object has no attribute 'getpid'
Unhandled exception in thread:
Traceback (most recent call last):
File "./Lib/test/test_fork1.py", line 30, in f
alive[id] = os.getpid()
AttributeError: 'None' object has no attribute 'getpid'
test_format
test_gc
...
When running test.test_fork1(), I get this:
clapton:3> LD_LIBRARY_PATH=`pwd` ./python
Python 2.0b1 (#0, Jul 4 2000, 17:06:15) [GCC 2.95.2 20000220 (Debian
GNU/Linux)] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)
>>> from test import test_fork1
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "./Lib/test/test_fork1.py", line 68, in ?
main()
File "./Lib/test/test_fork1.py", line 44, in main
assert a == range(NUM_THREADS)
AssertionError
>>>
test_thread takes very long to complete (5 min compared to 40 sec with
LinuxThreads); when you look at the following log, you'll see that it tends
to calls the threads serially !?
clapton:3> LD_LIBRARY_PATH=`pwd` ./python
Python 2.0b1 (#0, Jul 4 2000, 17:06:15) [GCC 2.95.2 20000220 (Debian
GNU/Linux)] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)
>>> from test import test_thread
creating task 1
creating task 2
creating task 3
task 1 will run for 2.1 sec
task 1 done
creating task 4
task 2 will run for 3.2 sec
creating task 5
task 2 done
creating task task 3 will run for 9.1 6
sec
task 3 done
creating task 7
task 4 will run for 2.5 sec
task 4 done
creating task 8
task 5 will run for 0.9 sec
task 5 done
creating task 9
task 6 will run for 7.4 sec
task 6 done
creating task 10
waiting for all tasks to complete
task 7 will run for 5.3 sec
task 7 done
task 8 will run for 2.6 sec
task 8 done
task 9 will run for 2.7 sec
task 9 done
task 10 will run for 0.9 sec
task 10 done
all tasks done
*** Barrier Test ***
task 0 will run for 0.0 sec
task 0 entering barrier 0
task 1 will run for 6.2 sec
task 1 entering barrier 0
task 7 will run for 7.0 sec
task 7 entering barrier 0
task 3 will run for 5.9 sec
task 3 entering barrier 0
task 4 will run for 4.5 sec
task 4 entering barrier 0
task 5 will run for 9.2 sec
task 5 entering barrier 0
task 6 will run for 1.4 sec
task 6 entering barrier 0
task 2 will run for 6.0 sec
task 2 entering barrier 0
task 8 will run for 2.4 sec
task 8 entering barrier 0
task 9 will run for 9.6 sec
task 9 entering barrier 0
task 9 leaving barrier 0
task 0 leaving barrier 0
task task 1 leaving barrier 0
0 will run for 0.0 sec
task 0 entering barrier 1
task 7 leaving barrier 0
task 9 will run for 0.8 sec
task 9 entering barrier task 3 leaving barrier 0
1
task 1 task 4 leaving barrier 0
will run for 6.1 sec
task 5 leaving barrier 0
task 1 entering barrier 1
task 6 leaving barrier 0
task 7 will run for 7.9 sec
task 2 leaving barrier 0
task 7 entering barrier 1
task 3 task 8 leaving barrier 0
will run for 7.8 sec
task 3 entering barrier 1
task 4 will run for 5.7 sec
task 4 entering barrier 1
task 5 will run for 2.0 sec
task 5 entering barrier 1
task 6 will run for 0.5 sec
task 6 entering barrier 1
task 2 will run for 7.4 sec
task 2 entering barrier 1
task 8 will run for 1.0 sec
task 8 entering barrier 1
task 8 leaving barrier 1
task 7 leaving barrier 1
task 9 leaving barrier 1
task 1 leaving barrier 1
task 8 will run for 6.9 sec
task 0 leaving barrier 1
task 8 entering barrier 2
task 0 will run for task 4 leaving barrier 1 0.0 sec
task 7 will run for 4.3 sec task 0 entering barrier
2
task 3 leaving barrier 1
task 7 entering barrier 2
task 5 leaving barrier 1
task 6 leaving barrier 1 task 9 will run for
8.2 sec
task task 2 leaving barrier 9 entering barrier 2
1
task 5 will run for 8.9 sec
task 5 entering barrier 2
task 2 will run for 8.3 sec
task 2 entering barrier 2
task 3 will run for 4.5 sec
task 3 entering barrier 2
task 1 will run for 7.0 sec
task 1 entering barrier 2
task 6 will run for 1.9 sec
task 6 entering barrier 2
task 4 will run for 0.2 sec
task 4 entering barrier 2
task 4 leaving barrier 2
task 8 leaving barrier 2
task 9 leaving barrier 2
task 7 leaving barrier 2
task 5 leaving barrier 2
task 0 leaving barrier 2
task 2 leaving barrier 2
task 3 leaving barrier 2
task 1 leaving barrier 2
task 6 leaving barrier 2
all tasks done
while this is the log of the same test with Python 1.5.2 and LinuxThreads:
clapton:3> python
Python 1.5.2 (#0, Apr 3 2000, 14:46:48) [GCC 2.95.2 20000313 (Debian
GNU/Linux)] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> from test import test_thread
creating task 1
creating task 2
creating task 3
creating task 4
creating task 5
creating task 6
creating task 7
creating task 8
creating task 9
creating task 10
waiting for all tasks to complete
task 1 will run for 8.9 sec
task 2 will run for 8.3 sec
task 3 will run for 9.1 sec
task 5 will run for 6.0 sec
task 4 will run for 7.5 sec
task 6 will run for 4.7 sec
task 7 will run for 4.2 sec
task 8 will run for 7.0 sec
task 9 will run for 8.7 sec
task 10 will run for 9.5 sec
task 7 done
task 6 done
task 5 done
task 8 done
task 4 done
task 2 done
task 9 done
task 1 done
task 3 done
task 10 done
all tasks done
*** Barrier Test ***
task 0 will run for 0.0 sec
task 1 will run for 2.8 sec
task 0 entering barrier 0
task 2 will run for 5.3 sec
task 3 will run for 9.2 sec
task 5 will run for 8.0 sec
task 4 will run for 8.9 sec
task 6 will run for 5.0 sec
task 7 will run for 1.3 sec
task 8 will run for 5.6 sec
task 9 will run for 4.7 sec
task 7 entering barrier 0
task 1 entering barrier 0
task 9 entering barrier 0
task 6 entering barrier 0
task 2 entering barrier 0
task 8 entering barrier 0
task 5 entering barrier 0
task 4 entering barrier 0
task 3 entering barrier 0
task 3 leaving barrier 0
task 3 will run for 0.1 sec
task 0 leaving barrier 0
task 0 will run for 0.0 sec
task 7 leaving barrier 0
task 7 will run for 6.6 sec
task 1 leaving barrier 0
task 1 will run for 1.0 sec
task 9 leaving barrier 0
task 9 will run for 8.2 sec
task 6 leaving barrier 0
task 6 will run for 1.0 sec
task 2 leaving barrier 0
task 2 will run for 9.2 sec
task 8 leaving barrier 0
task 8 will run for 4.4 sec
task 5 leaving barrier 0
task 5 will run for 9.6 sec
task 4 leaving barrier 0
task 4 will run for 1.7 sec
task 0 entering barrier 1
task 3 entering barrier 1
task 1 entering barrier 1
task 6 entering barrier 1
task 4 entering barrier 1
task 8 entering barrier 1
task 7 entering barrier 1
task 9 entering barrier 1
task 2 entering barrier 1
task 5 entering barrier 1
task 5 leaving barrier 1
task 5 will run for 6.6 sec
task 0 leaving barrier 1
task 0 will run for 0.0 sec
task 3 leaving barrier 1
task 3 will run for 8.5 sec
task 1 leaving barrier 1
task 1 will run for 0.1 sec
task 6 leaving barrier 1
task 6 will run for 4.7 sec
task 4 leaving barrier 1
task 4 will run for 4.7 sec
task 8 leaving barrier 1
task 8 will run for 1.7 sec
task 7 leaving barrier 1
task 7 will run for 1.8 sec
task 9 leaving barrier 1
task 9 will run for 2.8 sec
task 2 leaving barrier 1
task 2 will run for 3.3 sec
task 0 entering barrier 2
task 1 entering barrier 2
task 8 entering barrier 2
task 7 entering barrier 2
task 9 entering barrier 2
task 2 entering barrier 2
task 6 entering barrier 2
task 4 entering barrier 2
task 5 entering barrier 2
task 3 entering barrier 2
task 3 leaving barrier 2
task 0 leaving barrier 2
task 1 leaving barrier 2
task 8 leaving barrier 2
task 7 leaving barrier 2
task 9 leaving barrier 2
task 2 leaving barrier 2
task 6 leaving barrier 2
task 4 leaving barrier 2
task 5 leaving barrier 2
all tasks done
>>>
====================================================================
Audit trail:
Tue Jul 11 08:24:22 2000 guido moved from incoming to open
Follow-Ups:
Date: 2000-Aug-23 10:31
By: jhylton
Comment:
Another report of test_fork1 problems. Plan to resolve before 2.0b1.
-------------------------------------------------------
Date: 2000-Aug-23 10:36
By: tim_one
Comment:
Jeremy, my chances of helping someone with a problem specific to "Debian potato system with GNU Pth 1.2.3" are nil. Assigned back to you since you seem to believe it's feasible <wink>.
-------------------------------------------------------
Date: 2000-Aug-31 14:53
By: jhylton
Comment:
Haven't heard back from the submittor. This sounds like a problem with a buggy GNU Pth package; not a Python bug.
-------------------------------------------------------
Date: 2000-Sep-01 14:15
By: none
Comment:
I submitted the original pth support. pth has what I would consider a bug in that signals do not interrupt sleep(), usleep(), or select(), the latter being what Python uses to sleep. I'm going to look at this some more myself as soon as I can get the current CVS to configure with pth. -- andy@dustman.net
-------------------------------------------------------
Date: 2000-Sep-01 14:22
By: none
Comment:
Another thing which may be a factor in this case: Since pth threads are user-space and so all run in the same process, the test used in signalmodule.c:125 doesn't work, i.e.
if (getpid() == main_pid) {
It probably needs to be something more like this:
if (PyThread_get_thread_ident() != main_thread) {
I submitted a patch to fix this around the time of the CNRI split, so it probably got lost.
-- andy@dustman.net
-------------------------------------------------------
Date: 2000-Sep-06 17:08
By: adustman
Comment:
I submitted patch 101437 which should fix this.
-------------------------------------------------------
Date: 2000-Sep-15 11:06
By: jhylton
Comment:
The only substance left in this bug report is Andy Dustman's note about a different bug. He's already submitted a patch for it, so we'll use that to track the problem.
-------------------------------------------------------
For detailed info, follow this link:
http://sourceforge.net/bugs/?func=detailbug&bug_id=110675&group_id=5470