msg69647 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-07-14 09:57 |
The "PEP 8 compliant" API for multiprocessing and threading needs to be
cleaned up before release as per the thread on python-dev. The release
manager gave approval for this change during that discussion [1].
Changes needed:
- remove Py3k warnings from the threading module (old API is going to be
kept around even in Py3k)
- change get_name/set_name into a "name" property
- change is_daemon/set_daemon into a "daemon" property
(Note that changing "is_alive" to be a property is not on that list -
that can be a fairly expensive thing to check for the multiprocessing
library. I also left out active_count(), as I think the underscore adds
clarity in that case)
[1] http://mail.python.org/pipermail/python-dev/2008-June/080285.html
|
msg69648 - (view) |
Author: Andrii V. Mishkovskyi (mishok13) |
Date: 2008-07-14 10:36 |
Does this mean that all multiprocessing get_*/set_* methods should be
changed to be properties?
For example, multiprocessing.process.Process class defines not only
set_name/get_name and is_daemon/set_daemon methods, but also
get/set_authkey, get/set_exitcode and get_ident (this method is later
used as 'getx' argument of 'pid' property, so we could get rid of this
using simple decorator).
|
msg69649 - (view) |
Author: Andrii V. Mishkovskyi (mishok13) |
Date: 2008-07-14 10:38 |
Actually, 'getx' -> 'fget'. Sorry for the typo. :)
|
msg69654 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-07-14 13:45 |
I think we should still keep the py3k warnings on (I'll change them to
PendingDeprecationWarnings if you want.), so the API doesn't abruptly
change on people. With your approval, I'll make it so.
|
msg69665 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-07-14 22:25 |
At this stage I'm still inclined to skip the warnings completely - at
the very least, any eventual removals will go through a full deprecation
cycle in 2.7/3.1 before being removed in 2.8/3.2.
It's also much easier to be sure we aren't adversely affecting
performance of the old methods that way (with a
PendingDeprecationWarning, performance of the deprecated methods is
going to suffer a bit since the warnings machinery will still have to be
invoked to discover that the warning has been filtered out). That said,
the methods we're changing aren't likely to be something one invokes in
speed critical sections of an application, so I wouldn't object if the
old names emitted PDW in both 2.6 and 3.0.
Regarding the additional get/set properties on multiprocessing.Process,
it depends on whether or not they are cheap to calculate and whether or
not they involve any I/O operations. auth_key looked like it may be
expensive to set (since I assume there is a crypto calculation involved
there), exit_code may involve waiting for the other process to finish,
and get_ident may involve waiting for it to start. So my initial
reaction is that these are OK to keep as methods rather than trying to
turn them into properties.
The following pretty undesirable behaviour should probably be discussed
on python-dev before beta3 (if not beta2):
Python 2.6b1+ (trunk:64945, Jul 14 2008, 20:00:46)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import multiprocessing as mp
>>> isinstance(mp.Lock(), mp.Lock)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes
and types
>>> mp.Lock.__name__
'Lock'
>>> mp.Lock.__module__
'multiprocessing'
>>> mp.Lock().__class__.__name__
'Lock'
>>> mp.Lock().__class__.__module__
'multiprocessing.synchronize'
The delayed import functions in multiprocessing.__init__ look like a
serious misfeature to me. I'd be inclined to replace them with "from
.synchronize import *" and "from .process import *" (leaving anything
which isn't covered by those two imports to be retrieved directly from
the relevant mp submodule)
|
msg69776 - (view) |
Author: Barry A. Warsaw (barry) * |
Date: 2008-07-16 12:54 |
Is anybody working on a patch for this? Nick, I agree with you about
undesirable behavior, however if there is no patch currently under
development, I'm inclined to defer blocking until beta3.
|
msg69780 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-07-16 13:12 |
I don't want to change the API or any other code before we get the change
in for issue874900 which should fix/resolve issue3088
|
msg69782 - (view) |
Author: Barry A. Warsaw (barry) * |
Date: 2008-07-16 13:23 |
On Jul 16, 2008, at 9:12 AM, Jesse Noller wrote:
> I don't want to change the API or any other code before we get the
> change
> in for issue874900 which should fix/resolve issue3088
What's the holdup on 874900?
|
msg69783 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-07-16 13:25 |
I don't know, but I am going to ping Antoine and Greg and see if they
don't mind me applying it as-is.
|
msg69786 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-07-16 13:28 |
This should not block the release of beta 2 IMHO
|
msg70630 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-02 13:00 |
Sorry, I'm not going to be able to work on this soon.
|
msg71329 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-08-18 13:30 |
I created issue 3589 to cover the problem I mentioned above with the
very misleading names for the package level functions in multiprocessing.
|
msg71349 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-18 16:40 |
I think I can get this done before the release now. For starters I
changed thread.get_ident() to a property in r65818.
|
msg71357 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-18 18:44 |
Ok. I've done the threading API and patched up multiprocessing so it
actually works. Jesse, can you do multiprocessing?
Also, can we decide about is_alive as a property?
|
msg71358 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-18 18:45 |
Oh, and by the way, I would start working on multiprocessing by
reverting r65828.
|
msg71359 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-18 18:46 |
On Mon, Aug 18, 2008 at 2:44 PM, Benjamin Peterson
<report@bugs.python.org> wrote:
>
> Benjamin Peterson <musiccomposition@gmail.com> added the comment:
>
> Ok. I've done the threading API and patched up multiprocessing so it
> actually works. Jesse, can you do multiprocessing?
>
> Also, can we decide about is_alive as a property?
>
Yup, I can do the MP part.
|
msg71360 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-18 18:47 |
On Mon, Aug 18, 2008 at 2:45 PM, Benjamin Peterson
<report@bugs.python.org> wrote:
>
> Benjamin Peterson <musiccomposition@gmail.com> added the comment:
>
> Oh, and by the way, I would start working on multiprocessing by
> reverting r65828.
>
Makes sense.
|
msg71424 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-08-19 15:34 |
is_alive appears to be a potentially expensive check for the
multiprocessing side of things, which is why I'm inclined to leave it as
a method. "if t.is_alive():" actually reads better to me than "if
t.alive:" anyway.
|
msg71425 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-19 15:36 |
On Tue, Aug 19, 2008 at 10:34 AM, Nick Coghlan <report@bugs.python.org> wrote:
>
> Nick Coghlan <ncoghlan@gmail.com> added the comment:
>
> is_alive appears to be a potentially expensive check for the
> multiprocessing side of things, which is why I'm inclined to leave it as
> a method. "if t.is_alive():" actually reads better to me than "if
> t.alive:" anyway.
So be it. I don't really want to do any renaming anyway. :)
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue3352>
> _______________________________________
>
--
Cheers,
Benjamin Peterson
"There's no place like 127.0.0.1."
|
msg71426 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 15:36 |
On Tue, Aug 19, 2008 at 11:34 AM, Nick Coghlan <report@bugs.python.org> wrote:
>
> Nick Coghlan <ncoghlan@gmail.com> added the comment:
>
> is_alive appears to be a potentially expensive check for the
> multiprocessing side of things, which is why I'm inclined to leave it as
> a method. "if t.is_alive():" actually reads better to me than "if
> t.alive:" anyway.
Dang, I already cut that one over.
|
msg71431 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-08-19 15:51 |
My preference actually isn't particularly strong either way, so I
suggest asking Barry for a casting vote.
|
msg71432 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 15:52 |
Nick/Ben - here's a rough draft patch for the attribute changes for mp -
could you both take a look and let me know what you think?
|
msg71435 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-19 16:05 |
The patch looks pretty good. In a few places, you replaced x.set_x(True)
with x.x(True). The docs also will need a few tweaks. Otherwise, if the
tests pass, I say go ahead.
|
msg71437 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-08-19 16:09 |
Just saw a couple of docs checkins go by suggesting that the camelCase
names will be unavailable in 3.x. Remember that the intent *isn't* to
remove the old names from threading.py - we're just adding the PEP 8
names so that multiprocessing can have a PEP 8 compliant API while still
being close to a drop-in replacement for the 2.6 version of the
threading module.
This means that all of the DeprecationWarnings and so forth can be left
out completely.
Regarding your patch Jesse:
- if I remember rightly, get_exitcode() can block waiting for the other
process to finish, which makes turning it into a property a fairly
questionable idea (p.get_exitcode() blocking is a lot less surprising
than "p.exitcode" doing so)
- the get/set documentation for the new properties can probably be
consolidated, but that isn't a major problem as far as this week's beta
is concerned.
|
msg71439 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-08-19 16:10 |
Note regarding those comments - only the exitcode one is something we
should try to get sorted for the beta. Backing out the deprecation
warnings and cleaning up the documentation can wait for the first
release candidate.
|
msg71444 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-19 16:52 |
Barry said that is_alive should remain a method following in Guido's
footsteps.
|
msg71456 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 18:20 |
>
> Nick Coghlan <ncoghlan@gmail.com> added the comment:
>
> Note regarding those comments - only the exitcode one is something we
> should try to get sorted for the beta. Backing out the deprecation
> warnings and cleaning up the documentation can wait for the first
> release candidate.
>
Would it be acceptable to add a doc note mentioning .exitcode() may
block rather than changing it back to the get_exitcode method? It's
not that it's hard - but I do like the consistency of the
property-style interface.
|
msg71460 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 18:43 |
>
> Nick Coghlan <ncoghlan@gmail.com> added the comment:
>
> Note regarding those comments - only the exitcode one is something we
> should try to get sorted for the beta. Backing out the deprecation
> warnings and cleaning up the documentation can wait for the first
> release candidate.
>
Actually, re-examining .exitcode - it wraps the custom forking.Popen
class .poll() method, this method should not block (forking.py, line
104) - the WNOHANG call passed to os.waitpid means it should also not
hang.
|
msg71461 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 18:45 |
Here is a cleaned up patch (ben was right, I typo'ed a few spots) - I did
not clean up the docs from the original patch except to correct the
x.x(Foo) accidents.
|
msg71462 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 18:46 |
I attached the wrong patch, here is v2
|
msg71463 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 18:57 |
And here is v3 - I fixed all of the Docs/include/mp* scripts to reflect
the new API
|
msg71464 - (view) |
Author: Jesse Noller (jnoller) * |
Date: 2008-08-19 19:07 |
committed the v3 patch as-is in r65864 - moving from release blocker to
deferred blocker pending the Docs cleanup, and outstanding debate points.
|
msg71767 - (view) |
Author: Antoine Pitrou (pitrou) * |
Date: 2008-08-22 18:59 |
There are still some instances of get_name() in threading.py itself,
which gives errors like the following:
Unhandled exception in thread started by <bound method
Thread.__bootstrap of <Thread(reader 5, stopped daemon -1285227632)>>
Traceback (most recent call last):
File "/home/antoine/cpython/cpickle/Lib/threading.py", line 499, in
__bootstrap
self.__bootstrap_inner()
File "/home/antoine/cpython/cpickle/Lib/threading.py", line 537, in
__bootstrap_inner
(self.get_name(), _format_exc()))
AttributeError: 'Thread' object has no attribute 'get_name'
|
msg71768 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-08-22 19:02 |
Here's a patch.
|
msg72226 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 11:42 |
I found further PEP 8 non-compliances in the multiprocessing API while
working on a patch for issue 3589, mainly in the area of function names
that start with a capital letter, making them look like classes when
they definitely are not.
After noticing a few of these, I went through checked more thoroughly,
and found all of the following to be functions that claimed to be
classes by way of their naming convention (a far worse sin than using
camelCase instead of underscores):
multiprocessing.Pipe (aka multiprocessing.connection.Pipe)
multiprocessing.RawValue (aka multiprocessing.sharedctypes.RawValue)
multiprocessing.RawArray (aka multiprocessing.sharedctypes.RawArray)
multiprocessing.Value (aka multiprocessing.sharedctypes.Value)
multiprocessing.Array (aka multiprocessing.sharedctypes.Array)
multiprocessing.connection.Client
multiprocessing.connection.SocketClient
multiprocessing.connection.PipeClient
multiprocessing.connection.XmlClient
multiprocessing.managers.RebuildProxy
multiprocessing.managers.MakeProxyType
multiprocessing.managers.AutoProxy
multiprocessing.managers.Array
These should all be converted to start with a lowercase letter and use
underscores, otherwise people are going to assume they can be treated
like classes.
|
msg72229 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 12:02 |
Benjamin's patch was applied in r65982
|
msg72232 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 12:29 |
Patch added that removes the incorrect Py3k warnings from the threading
module (also restores the methods to the same __name__ attributes as
they had in 2.5).
|
msg72236 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 12:58 |
Second patch added that removes the deprecation warnings from the Py3k
version of the threading module.
|
msg72238 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 13:19 |
It turns out threading uses the odd "class-that-is-not-a-class" naming
scheme as well:
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore
threading.Event
threading.Timer
|
msg72239 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 13:27 |
Patch added to tone down note regarding the PEP 8 compliant aliases that
have been added to the threading module.
|
msg72240 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 13:46 |
And one last patch to adjust the threading docs in Py3k to reflect the
fact that the 2.x API is still supported, even if it is no longer
documented.
|
msg72241 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 13:51 |
Updated the 2.6 threading patch to also remove the warnings from the
methods that are being replaced by properties.
|
msg72242 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-09-01 13:54 |
The patches look good to me. Please apply.
|
msg72298 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 21:32 |
Regarding the factory functions that are named as if they were classes,
Fredrik noted on python-dev that the ones from the threading module are
explicitly documented as being factory functions, and the
multiprocessing API really just follows that example (note that without
applying the patch from issue 3589, all of the names that are factory
functions in the threading API are also factory functions in the
multiprocessing API).
So perhaps the best course at this stage is to just leave these alone
for 2.6/3.0?
|
msg72300 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-01 21:53 |
Ben, if you get a chance to apply those patches, feel free, otherwise I
should be able to get to them this evening (my time - about 10 hours
from now).
|
msg72304 - (view) |
Author: Benjamin Peterson (benjamin.peterson) * |
Date: 2008-09-01 23:13 |
Ok. patches applied in r66126 and r66127.
|
msg72320 - (view) |
Author: Alyssa Coghlan (ncoghlan) * |
Date: 2008-09-02 09:43 |
Thanks!
|
|
Date |
User |
Action |
Args |
2022-04-11 14:56:36 | admin | set | github: 47602 |
2008-09-02 09:43:26 | ncoghlan | set | messages:
+ msg72320 |
2008-09-01 23:13:33 | benjamin.peterson | set | status: open -> closed resolution: fixed messages:
+ msg72304 |
2008-09-01 21:53:21 | ncoghlan | set | messages:
+ msg72300 |
2008-09-01 21:32:35 | ncoghlan | set | messages:
+ msg72298 |
2008-09-01 13:54:22 | benjamin.peterson | set | messages:
+ msg72242 |
2008-09-01 13:51:55 | ncoghlan | set | files:
+ issue3352_remove_threading_py3k_warnings.diff messages:
+ msg72241 |
2008-09-01 13:50:32 | ncoghlan | set | files:
- issue3352_remove_threading_py3k_warnings.diff |
2008-09-01 13:46:19 | ncoghlan | set | files:
+ issue3352_update_30_threading_docs.diff messages:
+ msg72240 |
2008-09-01 13:27:20 | ncoghlan | set | files:
+ issue3352_tone_down_26_threading_docs.diff messages:
+ msg72239 |
2008-09-01 13:19:35 | ncoghlan | set | messages:
+ msg72238 |
2008-09-01 12:58:58 | ncoghlan | set | keywords:
+ patch |
2008-09-01 12:58:41 | ncoghlan | set | assignee: jnoller -> |
2008-09-01 12:58:31 | ncoghlan | set | keywords:
+ needs review, - patch |
2008-09-01 12:58:14 | ncoghlan | set | files:
+ issue3352_remove_threading_deprecation_warnings.diff messages:
+ msg72236 |
2008-09-01 12:29:48 | ncoghlan | set | files:
+ issue3352_remove_threading_py3k_warnings.diff messages:
+ msg72232 |
2008-09-01 12:02:12 | ncoghlan | set | messages:
+ msg72229 |
2008-09-01 11:42:46 | ncoghlan | set | messages:
+ msg72226 |
2008-08-22 19:02:02 | benjamin.peterson | set | files:
+ get_name.patch messages:
+ msg71768 |
2008-08-22 18:59:36 | pitrou | set | nosy:
+ pitrou messages:
+ msg71767 |
2008-08-21 03:07:04 | barry | set | priority: deferred blocker -> release blocker |
2008-08-19 19:07:27 | jnoller | set | priority: release blocker -> deferred blocker messages:
+ msg71464 |
2008-08-19 18:57:11 | jnoller | set | files:
+ mp_api_cleanup-v3.patch messages:
+ msg71463 |
2008-08-19 18:46:25 | jnoller | set | files:
+ mp_api_cleanup.patch messages:
+ msg71462 |
2008-08-19 18:45:35 | jnoller | set | files:
- mp_nohang_jnoller.patch |
2008-08-19 18:45:28 | jnoller | set | files:
- mp_api_cleanup.patch |
2008-08-19 18:45:22 | jnoller | set | files:
+ mp_nohang_jnoller.patch messages:
+ msg71461 |
2008-08-19 18:43:23 | jnoller | set | messages:
+ msg71460 |
2008-08-19 18:20:53 | jnoller | set | messages:
+ msg71456 |
2008-08-19 16:52:33 | benjamin.peterson | set | messages:
+ msg71444 |
2008-08-19 16:10:45 | ncoghlan | set | messages:
+ msg71439 |
2008-08-19 16:09:18 | ncoghlan | set | messages:
+ msg71437 |
2008-08-19 16:05:44 | benjamin.peterson | set | messages:
+ msg71435 |
2008-08-19 15:52:42 | jnoller | set | files:
+ mp_api_cleanup.patch keywords:
+ patch messages:
+ msg71432 |
2008-08-19 15:51:50 | ncoghlan | set | messages:
+ msg71431 |
2008-08-19 15:36:29 | jnoller | set | messages:
+ msg71426 |
2008-08-19 15:36:11 | benjamin.peterson | set | messages:
+ msg71425 |
2008-08-19 15:34:55 | ncoghlan | set | messages:
+ msg71424 |
2008-08-18 18:47:44 | jnoller | set | messages:
+ msg71360 |
2008-08-18 18:46:54 | jnoller | set | messages:
+ msg71359 |
2008-08-18 18:45:48 | benjamin.peterson | set | messages:
+ msg71358 |
2008-08-18 18:44:09 | benjamin.peterson | set | assignee: benjamin.peterson -> jnoller messages:
+ msg71357 |
2008-08-18 16:40:34 | benjamin.peterson | set | assignee: benjamin.peterson messages:
+ msg71349 |
2008-08-18 13:30:26 | ncoghlan | set | messages:
+ msg71329 |
2008-08-02 13:00:08 | benjamin.peterson | set | assignee: benjamin.peterson -> (no value) messages:
+ msg70630 |
2008-07-18 03:46:43 | barry | set | priority: deferred blocker -> release blocker |
2008-07-16 13:52:15 | benjamin.peterson | set | priority: release blocker -> deferred blocker |
2008-07-16 13:28:28 | jnoller | set | messages:
+ msg69786 |
2008-07-16 13:25:10 | jnoller | set | messages:
+ msg69783 |
2008-07-16 13:23:28 | barry | set | messages:
+ msg69782 |
2008-07-16 13:12:04 | jnoller | set | messages:
+ msg69780 |
2008-07-16 12:54:43 | barry | set | nosy:
+ barry messages:
+ msg69776 |
2008-07-14 22:25:53 | ncoghlan | set | messages:
+ msg69665 |
2008-07-14 13:45:10 | benjamin.peterson | set | assignee: benjamin.peterson messages:
+ msg69654 nosy:
+ benjamin.peterson |
2008-07-14 10:38:55 | mishok13 | set | messages:
+ msg69649 |
2008-07-14 10:36:37 | mishok13 | set | nosy:
+ jnoller, mishok13 messages:
+ msg69648 |
2008-07-14 09:57:55 | ncoghlan | create | |