diff options
author | Georg Brandl <georg@python.org> | 2009-08-13 12:26:19 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-08-13 12:26:19 (GMT) |
commit | d80344f8d3dec44c3045964c4f5a7710a502bdf5 (patch) | |
tree | df8ca536cab9e081535d403e49b4914e8e0b628b | |
parent | a85ee5cfb612e5933c9ef2eb0b24a103acc14ef7 (diff) | |
download | cpython-d80344f8d3dec44c3045964c4f5a7710a502bdf5.zip cpython-d80344f8d3dec44c3045964c4f5a7710a502bdf5.tar.gz cpython-d80344f8d3dec44c3045964c4f5a7710a502bdf5.tar.bz2 |
Merged revisions 74055 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
(Selected changes only.)
................
r74055 | alexandre.vassalotti | 2009-07-17 11:18:18 +0200 (Fr, 17 Jul 2009) | 55 lines
Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74008 | benjamin.peterson | 2009-07-14 20:46:42 -0400 (Tue, 14 Jul 2009) | 1 line
update year
........
r74011 | ezio.melotti | 2009-07-15 13:07:04 -0400 (Wed, 15 Jul 2009) | 1 line
methods' names pep8ification
........
r74019 | amaury.forgeotdarc | 2009-07-15 17:29:27 -0400 (Wed, 15 Jul 2009) | 2 lines
#6076 Add a title to the IDLE Preferences window.
........
r74020 | georg.brandl | 2009-07-16 03:18:07 -0400 (Thu, 16 Jul 2009) | 1 line
#5910: fix kqueue for calls with more than one event.
........
r74021 | georg.brandl | 2009-07-16 03:33:04 -0400 (Thu, 16 Jul 2009) | 1 line
#6486: start with built in functions rather than "built in objects".
........
r74022 | georg.brandl | 2009-07-16 03:38:35 -0400 (Thu, 16 Jul 2009) | 1 line
#6481: fix typo in os.system() replacement.
........
r74023 | jesse.noller | 2009-07-16 10:23:04 -0400 (Thu, 16 Jul 2009) | 1 line
Issue 6433: multiprocessing.pool.map hangs on empty list
........
................
-rw-r--r-- | Doc/copyright.rst | 2 | ||||
-rw-r--r-- | Doc/library/intro.rst | 5 | ||||
-rw-r--r-- | Doc/library/subprocess.rst | 2 | ||||
-rw-r--r-- | Lib/idlelib/configDialog.py | 1 | ||||
-rw-r--r-- | Lib/multiprocessing/pool.py | 2 | ||||
-rw-r--r-- | Lib/test/test_kqueue.py | 16 | ||||
-rw-r--r-- | Lib/test/test_multiprocessing.py | 6 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/selectmodule.c | 7 |
10 files changed, 37 insertions, 7 deletions
diff --git a/Doc/copyright.rst b/Doc/copyright.rst index 376b1c4..ec78a38 100644 --- a/Doc/copyright.rst +++ b/Doc/copyright.rst @@ -4,7 +4,7 @@ Copyright Python and this documentation is: -Copyright © 2001-2008 Python Software Foundation. All rights reserved. +Copyright © 2001-2009 Python Software Foundation. All rights reserved. Copyright © 2000 BeOpen.com. All rights reserved. diff --git a/Doc/library/intro.rst b/Doc/library/intro.rst index ce1691d..a0f2d63 100644 --- a/Doc/library/intro.rst +++ b/Doc/library/intro.rst @@ -43,8 +43,9 @@ browse the table of contents (in front of the manual), or look for a specific function, module or term in the index (in the back). And finally, if you enjoy learning about random subjects, you choose a random page number (see module :mod:`random`) and read a section or two. Regardless of the order in which you -read the sections of this manual, it helps to start with chapter :ref:`builtin`, -as the remainder of the manual assumes familiarity with this material. +read the sections of this manual, it helps to start with chapter +:ref:`built-in-funcs`, as the remainder of the manual assumes familiarity with +this material. Let the show begin! diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index bf4ead7..2af5489 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -424,7 +424,7 @@ Replacing :func:`os.system` sts = os.system("mycmd" + " myarg") ==> p = Popen("mycmd" + " myarg", shell=True) - sts = os.waitpid(p.pid, 0) + sts = os.waitpid(p.pid, 0)[1] Notes: diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py index 20ed827..6482119 100644 --- a/Lib/idlelib/configDialog.py +++ b/Lib/idlelib/configDialog.py @@ -30,6 +30,7 @@ class ConfigDialog(Toplevel): self.wm_withdraw() self.configure(borderwidth=5) + self.title('IDLE Preferences') self.geometry("+%d+%d" % (parent.winfo_rootx()+20, parent.winfo_rooty()+30)) #Theme Elements. Each theme element key is its display name. diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py index 5c1805f..d3ecc9b 100644 --- a/Lib/multiprocessing/pool.py +++ b/Lib/multiprocessing/pool.py @@ -208,6 +208,8 @@ class Pool(object): chunksize, extra = divmod(len(iterable), len(self._pool) * 4) if extra: chunksize += 1 + if len(iterable) == 0: + chunksize = 0 task_batches = Pool._get_tasks(func, iterable, chunksize) result = MapResult(self._cache, chunksize, len(iterable), callback) diff --git a/Lib/test/test_kqueue.py b/Lib/test/test_kqueue.py index dd1ecc8..5ba21a2 100644 --- a/Lib/test/test_kqueue.py +++ b/Lib/test/test_kqueue.py @@ -163,6 +163,22 @@ class TestKQueue(unittest.TestCase): server.close() serverSocket.close() + def testPair(self): + kq = select.kqueue() + a, b = socket.socketpair() + + a.send(b'foo') + event1 = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE) + event2 = select.kevent(b, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE) + r = kq.control([event1, event2], 1, 1) + self.assertTrue(r) + self.assertFalse(r[0].flags & select.KQ_EV_ERROR) + self.assertEquals(b.recv(r[0].data), b'foo') + + a.close() + b.close() + kq.close() + def test_main(): support.run_unittest(TestKQueue) diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index 9f4e1a2..18066ba 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -991,6 +991,12 @@ class _TestPool(BaseTestCase): self.assertEqual(pmap(sqr, list(range(100)), chunksize=20), list(map(sqr, list(range(100))))) + def test_map_chunksize(self): + try: + self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1) + except multiprocessing.TimeoutError: + self.fail("pool.map_async with chunksize stalled on null list") + def test_async(self): res = self.pool.apply_async(sqr, (7, TIMEOUT1,)) get = TimingWrapper(res.get) @@ -199,6 +199,7 @@ Walter Dörwald Hans Eckardt Grant Edwards John Ehresman +Eric Eisner Andrew Eland Lance Ellinghaus David Ely @@ -950,6 +950,8 @@ Library - Issue #6459: distutils.command.build_ext.get_export_symbols now uses the "PyInit" prefix, rather than "init". +- Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list + - Issue #6455: Fixed test_build_ext under win32. - Issue #6413: Fixed the log level in distutils.dist for announce. diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index 191296e..13ac115 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1492,7 +1492,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) if (nevents < 0) { PyErr_Format(PyExc_ValueError, "Length of eventlist must be 0 or positive, got %d", - nchanges); + nevents); return NULL; } @@ -1550,6 +1550,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) PyErr_NoMemory(); return NULL; } + i = 0; while ((ei = PyIter_Next(it)) != NULL) { if (!kqueue_event_Check(ei)) { Py_DECREF(ei); @@ -1558,7 +1559,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) "select.kevent objects"); goto error; } else { - chl[i] = ((kqueue_event_Object *)ei)->e; + chl[i++] = ((kqueue_event_Object *)ei)->e; } Py_DECREF(ei); } @@ -1589,7 +1590,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args) goto error; } - for (i=0; i < gotevents; i++) { + for (i = 0; i < gotevents; i++) { kqueue_event_Object *ch; ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type); |