[Python-Dev] VC6 support on release25-maint
Hello. I noticed VisualC++6 support came back. I'm glad with that, but still it seems incomplete. (for example, _sqlite3 support) Maybe does this patch help process? On my machine, testcases other than distutils runs fine. http://sourceforge.net/tracker/?func=detail&aid=1457736&group_id=5470&atid=305470 ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] python/trunk/Lib/test/test_urllib.py (for ftpwrapper)
# Sorry, I posted to inapropreate mailing list. (Python-3000)
http://mail.python.org/pipermail/python-checkins/2007-May/060507.html
Hello. I'm using Windows2000, I tried some investigation for
test_ftpwrapper.
After I did this change, most errors were gone.
Index: Lib/urllib.py
===
--- Lib/urllib.py (revision 55584)
+++ Lib/urllib.py (working copy)
@@ -833,7 +833,7 @@
self.busy = 0
self.ftp = ftplib.FTP()
self.ftp.connect(self.host, self.port, self.timeout)
-self.ftp.login(self.user, self.passwd)
+#self.ftp.login(self.user, self.passwd)
for dir in self.dirs:
self.ftp.cwd(dir)
I don't know, but probably 'login' on Win2000 is problamatic.
Remaining error is:
File "e:\python-dev\trunk\lib\threading.py", line 460, in __bootstrap
self.run()
File "e:\python-dev\trunk\lib\threading.py", line 440, in run
self.__target(*self.__args, **self.__kwargs)
File "test_urllib.py", line 565, in server
conn.recv(13)
error: (10035, 'The socket operation could not complete without blocking')
And after commented out conn.recv block in test_urllib.py, test passed fine.
def server(evt):
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.settimeout(3)
serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serv.bind(("", 9093))
serv.listen(5)
try:
conn, addr = serv.accept()
conn.send("1 Hola mundo\n")
"""
cantdata = 0
while cantdata < 13:
data = conn.recv(13-cantdata)
cantdata += len(data)
time.sleep(.3)
"""
conn.send("2 No more lines\n")
conn.close()
except socket.timeout:
pass
finally:
serv.close()
evt.set()
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5 slower than 2.4 for some things?
> I've had a report from a user that Plex runs about half
> as fast in 2.5 as it did in 2.4. In particular, the
> NFA-to-DFA conversion phase, which does a lot of
> messing about with dicts representing mappings between
> sets of states.
>
> Does anyone in the Ministry for Making Python Blazingly
> fast happen to know of some change that might have
> pessimised things in this area?
Hello, I investigated. On my environment, consumed time is
E:\Plex-1.1.5>py24 plex_test2.py
0.71065668
E:\Plex-1.1.5>py25 plex_test2.py
0.92131335
And after I applied this patch to Plex/Machines, (make `Node' new style
class)
62c62
< class Node:
---
> class Node(object):
E:\Plex-1.1.5>py24 plex_test2.py
0.40122888
E:\Plex-1.1.5>py25 plex_test2.py
0.350999832153
So, probably hash, comparation mechanizm of old/new style class has changed.
# improved for new style class, worse for old style class. Maybe optimized
for new style class?
Try this for minimum test.
import timeit
init = """
class Class:
pass
c1 = Class()
c2 = Class()
"""
t1 = timeit.Timer("""
c1 < c2
""", init)
t2 = timeit.Timer("""
hash(c1)
hash(c2)
""", init)
print t1.timeit(1000)
print t2.timeit(1000)
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5 slower than 2.4 for some things?
> Meanwhile I tried to replace the parsing I did with Plex by re.Scanner.
And
> again there is a remarkable speed difference. Again python2.5 is slower:
>
> try:
> from re import Scanner
> except:
> from sre import Scanner
>
> pars = {}
> order = []
> count = 0
>
> def par(scanner,name):
> global count, order, pars
>
> if name in ['caller','e','pi']:
> return name
> if name not in pars.keys():
> pars[name] = ('ns', count)
> order.append(name)
> ret = 'a[%d]'%count
> count += 1
> else:
> ret = 'a[%d]'%(order.index(name))
> return ret
>
> scanner = Scanner([
> (r"x", lambda y,x: x),
> (r"[a-zA-Z]+\.", lambda y,x: x),
> (r"[a-z]+\(", lambda y,x: x),
> (r"[a-zA-Z_]\w*", par),
> (r"\d+\.\d*", lambda y,x: x),
> (r"\d+", lambda y,x: x),
> (r"\+|-|\*|/", lambda y,x: x),
> (r"\s+", None),
> (r"\)+", lambda y,x: x),
> (r"\(+", lambda y,x: x),
> (r",", lambda y,x: x),
> ])
>
> import profile
> import pstats
>
> def run():
> arg = '+amp*exp(-(x-pos)/fwhm)'
> for i in range(100):
> scanner.scan(arg)
>
> profile.run('run()','profscanner')
> p = pstats.Stats('profscanner')
> p.strip_dirs()
> p.sort_stats('cumulative')
> p.print_stats()
Well, I tried this script, there was no big difference.
Python2.4 0.772sec
Python2.5 0.816sec
Probably I found one reason comparation for classic style class is slower on
Python2.5.
Comparation function instance_compare() calls PyErr_GivenExceptionMatches(),
and it was just flag operation on 2.4. But on 2.5, probably related to
introduction of BaseException,
it checks inherited type tuple. (ie: PyExceptionInstance_Check)
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5 slower than 2.4 for some things?
> > Probably I found one reason comparation for classic style class is
slower on
> > Python2.5.
> > Comparation function instance_compare() calls
PyErr_GivenExceptionMatches(),
> > and it was just flag operation on 2.4. But on 2.5, probably related to
> > introduction of BaseException,
> > it checks inherited type tuple. (ie: PyExceptionInstance_Check)
>
> I'm curious about the speed of 2.6 (trunk). I think this should have
> become faster due to the introduction of fast subtype checks (he says
> without looking at the code).
>
> n
>
Yes, I confirmed trunk is faster than 2.5.
///
// Code
import timeit
t = timeit.Timer("""
f1 < f2
""", """
class Foo:
pass
f1 = Foo()
f2 = Foo()
""")
print t.timeit(1)
///
// Result
release-maint24 0.337sec
release-maint25 0.625sec
trunk 0.494sec
//
// Result of plex_test2.py
release-maint24 2.944sec
release-maint25 4.026sec
trunk 3.625sec
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Investigated ref leak report related to thread (regrtest.py -R ::)
Hello. I investigated ref leak report related to thread.
Please run python regrtest.py -R :: test_leak.py (attached file)
Sometimes ref leak is reported.
# I saw this as regression failure on python-checkins.
# total ref count 92578 -> 92669
_Condition 2
Thread 6
_Event 1
bool 10
instancemethod 1
code 2
dict 9
file 1
frame 3
function 2
int 1
list 2
builtin_function_or_method 5
NoneType 2
str 27
thread.lock 7
tuple 5
type 5
Probably this happens because threading.Thread is implemented as Python
code,
(expecially threading.Thread#join), the code of regrtest.py
if i >= nwarmup:
deltas.append(sys.gettotalrefcount() - rc - 2)
can run before thread really quits. (before Moudles/threadmodule.c
t_bootstrap()'s
Py_DECREF(boot->func);
Py_DECREF(boot->args);
Py_XDECREF(boot->keyw);
runs)
So I experimentally inserted the code to wait for thread termination.
(attached file experimental.patch) And I confirmed error was gone.
# Sorry for hackish patch which only runs on windows. It should run
# on other platforms if you replace Sleep() in Python/sysmodule.c
# sys_debug_ref_leak_leave() with appropriate function.
import threading
import time
import unittest
from test import test_support
class Thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self._stop = False
self.ready = threading.Event()
def stop(self):
self._stop = True
self.join()
def run(self):
self.ready.set()
while not self._stop:
time.sleep(0.5)
class LeakTests(unittest.TestCase):
def test_leak(self):
def foo():
raise RuntimeError("foo")
self.assertRaises(RuntimeError, foo)
def setUp(self):
self._thread = Thread()
self._thread.start()
self._thread.ready.wait()
def tearDown(self):
self._thread.stop()
def test_main():
test_support.run_unittest(LeakTests)
if __name__ == "__main__":
test_main()
experimental.patch
Description: Binary data
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Investigated ref leak report related to thread (regrtest.py -R ::)
> Please post a bug report to SF and report the bug number here. When you > post bugs only to the list they get lost. > -- > Aahz ([EMAIL PROTECTED]) <*> http://www.pythoncraft.com/ > > "as long as we like the same operating system, things are cool." --piranha Thank you for pointing it out. Done. http://www.python.org/sf/1739118 ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5.2 release coming up
Is threre any chance to fix this bug before releasing 2.5.2? http://bugs.python.org/issue1736 It contains potential buffer overrun, I think this is somewhat important. If multibyte support (CharNext) is not needed, I 'll rewrite the patch gracefully. ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5.2 release coming up
> From:
>
http://www.python.org/dev/buildbot/all/x86%20XP-4%202.5/builds/107/step-test/0
>
> The errors are:
>
> File
"E:\cygwin\home\db3l\buildarea\2.5.bolen-windows\build\lib\test\test_mailbox
.py",
> line 522, in test_consistent_factory
> msg2 = box.get_message(key)
> File
"E:\cygwin\home\db3l\buildarea\2.5.bolen-windows\build\lib\mailbox.py",
> line 315, in get_message
> subpath = self._lookup(key)
> File
"E:\cygwin\home\db3l\buildarea\2.5.bolen-windows\build\lib\mailbox.py",
> line 484, in _lookup
> raise KeyError('No message with key: %s' % key)
> KeyError: 'No message with key: 1201127998.M194999P232Q203.buildbot'
I did quick investigation on this error.
After self._refresh() (line 480 in _loopkup - Lib/mailbox.py) runs,
self._toc contains key like this.
1201171711.M848000P1176Q16.whiterab-c2znlh!2,FR
Please look at exclamation mark. Probably this is not intended on most
platforms like Unix.
It should be ":" colon.
But on windows, ":" is special letter after drive letter. (ex:
"C:/Winnt/foo/bar")
So I imagine open() or something converts ":" to "!" (valid character as
file name).
After I applied following experimental patch, test_mailbox.py run
successfully on windows.
Index: Lib/mailbox.py
===
--- Lib/mailbox.py (revision 60233)
+++ Lib/mailbox.py (working copy)
@@ -223,7 +223,8 @@
class Maildir(Mailbox):
"""A qmail-style Maildir mailbox."""
-colon = ':'
+# colon = ':'
+colon = "!"
def __init__(self, dirname, factory=rfc822.Message, create=True):
"""Initialize a Maildir instance."""
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 2.5.2 release coming up
> But on windows, ":" is special letter after drive letter. (ex:
> "C:/Winnt/foo/bar")
> So I imagine open() or something converts ":" to "!" (valid character as
> file name).
Sorry, I lied. :-(
open() didn't change ":", test_mailbox.py (TestMaildir.setUp) changed
self._box.colon to "!"
Otherwise, newly created mail box in test_consistent_factory 's "colon" is
":".
This mismatch causes error.
Following patch solves error, but I don't know if this is good solution.
Index: Lib/test/test_mailbox.py
===
--- Lib/test/test_mailbox.py (revision 60233)
+++ Lib/test/test_mailbox.py (working copy)
@@ -458,12 +458,11 @@
class TestMaildir(TestMailbox):
-_factory = lambda self, path, factory=None: mailbox.Maildir(path,
factory)
-
-def setUp(self):
-TestMailbox.setUp(self)
+def _factory(self, path, factory=None):
+box = mailbox.Maildir(path, factory)
if os.name in ('nt', 'os2') or sys.platform == 'cygwin':
-self._box.colon = '!'
+box.colon = '!'
+return box
def test_add_MM(self):
# Add a MaildirMessage instance
@@ -518,7 +517,7 @@
# Create new mailbox with
class FakeMessage(mailbox.MaildirMessage):
pass
-box = mailbox.Maildir(self._path, factory=FakeMessage)
+box = self._factory(self._path, factory=FakeMessage)
msg2 = box.get_message(key)
self.assert_(isinstance(msg2, FakeMessage))
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] 3.0 buildbots all red
> Yeah, sounds like a memory issue. Did you try running with valgrind > or purify? I haven't done so for a long time, perhaps never on 3k > branch. It would be a good thing to run a tool soon. Maybe is this related? [Potential overflows due to incorrect usage of PyUnicode_AsString] http://bugs.python.org/issue1950 Thank you. ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Is Py_WIN_WIDE_FILENAMES still alive?
Hello. I noticed when I removes following line in trunk/PC/pyconfig.h #define Py_WIN_WIDE_FILENAMES _fileio.c and posixmodule.c (and maybe more) cannot be compiled on Windows. When Py_WIN_WIDE_FILENAMES is not defined, how should python behave? - call posix functions like open(2) - call ANSI Win32 APIs like MoveFileA Or maybe this macro is not used anymore? Thank you. ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Is Py_WIN_WIDE_FILENAMES still alive?
> I believe the macro should be removed, as Python currently assumes Unicode
> APIs are available in a number of places.
My +1 for removal. Even 2.5 cannot be compiled without this macro, probably
no one is using this.
> This consistent with the versions
> of Windows Python currently supports. It is possible that patches would
be
> accepted which enable Python to be built without this functionality - in
> which case the next-best behavior would probably be to convert Unicode to
> MBCS encoded strings and call the *A versions of the API. Looking at the
> history for posixmodule.c etc will offer some clues as to how this could
> best be done.
One problem with removal, PyArg_ParseTuple doesn't have option to convert
to unicode (like "et" exists for unicode -> 8bit char buffer), so it's
harder to
report argument error.
>>> os.rename(4, 2)
Traceback (most recent call last):
File "", line 1, in
TypeError: rename() argument 1 must be string, not int
/* After removal of *A win32 APIs */
if (PyArg_ParseTuple("OO:rename", &o1, &o2)) {
convert_to_unicode(&o1); /* if these methods failed, should we report
same error above
convert_to_unicode(&o2); * by ourselves? */
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Should bytearray(b'a')[0] should 1-char or number?
# I tried to post this to bug tracker, but couldn't, so posted here... r62095 says >Fix and enable a skipped test: >with python 2.6, enumerating bytes yields 1-char strings, not numbers. > >Don't merge this into the py3k branch. This is true for bytes, but not for bytearray. >>> bytearray(b'a')[0] 97 [28493 refs] >>> b'a'[0] 'a' And this causes error on my environment like this. == FAIL: testDecoder (__main__.StatefulIncrementalDecoderTest) -- Traceback (most recent call last): File "test_io.py", line 629, in testDecoder self.assertEquals(d.decode(input, eof), output) AssertionError: u'o.i.a.b.c.d.' != u'abcd.' But strange, I cannot see this error on python.org buildbot. ??? ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
