[Andrew Kuchling]
[CC'ed to python-dev, Barbara Mattson]
Barbara's encountered an apparent problem with test_longexp in Python 2.2 on MacOS X. test_longexp creates a big list expression and eval()'s it. The problem is that it takes an exceedingly long time to run, at least more than half an hour (at which point she interrupted it).
The two curious things are that 1) while test_longexp requires a lot of memory and often thrashes on a low-memory machine (I found there are 2 or 3 bugs in the SF bugtracker to this effect), the MacOS box in question has a gigabyte of RAM, and 2) Python 2.1.1 *doesn't* show the problem.
The test takes about 2 seconds on my box (Win98SE, 256MB, 866MHz), in 2.2 or 2.1.1, and I don't know of any Mac-specific code that might get touched here except for the C library. So Skip's suggestion to try pymalloc is a good one -- although it's hard to see in advance why that would make a difference in this specific case.
Quoting from her report:
I tried the test_longexp by hand:
REPS = XXX l = eval("[" + "2," * REPS + "]") print len(l)
Break it into smaller steps so we can narrow down possible causes: REPS = 50000 print "building list guts" guts = "2," * REPS print "building input string" input = "[" + guts + "]" print "compiling the input string" code = compile(input, "<input string>", "eval") print "executing" thelist = eval(code) print len(thelist) When REPS is large, what's the last thing that gets printed before the huge delay starts?