The async API of the future: PEP 3153 (async-pep)

[Hopefully this is the last spin-off thread from "asyncore: included batteries don't fit"] [LvH]
If there's one take away idea from async-pep, it's reusable protocols.
[Guido]
[LvH]
Correct.
So it's totally unfinished?
No, but I feel that there should be some actual specification. I am also looking forward to an actual meaty bit of example code -- ISTR you mentioned you had something, but that it was incomplete, and I can't find the link.
The words "data_received" don't even occur in the PEP.
Yes.
Right.
Yes, that's in the thread with subject "The async API of the future: Twisted and Deferreds".
Hmm... I guess that depends on how your legacy code works. As Barry mentioned somewhere, the email package's feedparser() is an attempt at implementing this -- but he sounded he has doubts that it works as-is in an async environment. However I am more worried about pull-based APIs. Take (as an extreme example) the standard stream API for reading, especially TextIOWrapper. I could see how we could turn the *writing* APIs async easily enough, but I don't see how to do it for the reading end -- you can't seriously propose to read the entire file into the buffer and then satisfy all reads from memory.
I think you mean this as an indication that providing the forward path for existing asyncore apps shouldn't be rocket science, right? Sure, I don't want to worry about that, I just want to make sure that we don't *completely* paint ourselves into the wrong corner when it comes to that.
Yes, now it makes sense.
I think I answered this in the reactors thread -- I propose an I/O object abstraction that is not directly tied to a file descriptor, but for which a concrete implementation can be made to support file descriptors, and another to support App Engine RPC.
In this example, where would eg the select/epoll/whatever calls happen? Is it something that calls the reactor that then in turn calls whatever?
App Engine doesn't have select/epoll/whatever, so it would have a reactor implementation that doesn't use them. But the standard Unix reactor would support file descriptors using select/etc. Please respond in the reactors thread.
Again, a topic for the reactor thread. But I'm really hoping you'll make good on your promise of redoing async-pep, giving some actual specifications and example code, so I can play with it. -- --Guido van Rossum (python.org/~guido)

On Sat, Oct 13, 2012 at 1:22 AM, Guido van Rossum <guido@python.org> wrote:
At the time, the people I talked to placed significantly more weight in "explain why this is necessary" than "get me something I can play with".
Just examples of how it would work, nothing hooked up to real code. My memory of it is more of a drowning-in-politics-and-bikeshedding kind of thing, unfortunately :) Either way, I'm okay with letting bygones be bygones and focus on how we can get this show on the road.
See above. What thread should I reply in about the pull APIs?
I just want to make sure that we don't *completely* paint ourselves into the wrong corner when it comes to that.
I don't think we have to worry about it too much. Any reasonable API I can think of makes this completely doable. But I'm really hoping you'll make good on your promise of redoing
async-pep, giving some actual specifications and example code, so I can play with it.
Takeaways: - The async API of the future is very important, and too important to be left to chance. - It requires a lot of very experienced manpower. - It requires a lot of effort to handle the hashing out of it (as we're doing here) as well as it deserves to be. I'll take as proactive a role as I can afford to take in this process, but I don't think I can do it by myself. Furthermore, it's a risk nobody wants to take: a repeat performance wouldn't be good for anyone, in particular not for Python nor myself. I've asked JP Calderone and Itamar Turner-Trauring if they would be interested in carrying this forward professionally, and they have tentatively said yes. JP's already familiar with a large part of the problem space with the implementation of the ssl module. JP and Itamar have worked together for years and have recently set up a consulting firm. Given that this is emphatically important to Python, I intend to apply for a PSF grant on their behalf to further this goal. Given their experience in the field, I expect this to be a fairly low risk endeavor.
-- --Guido van Rossum (python.org/~guido)
-- cheers lvh

On Sat, Oct 13, 2012 at 10:54 AM, Laurens Van Houtven <_@lvh.cc> wrote:
Odd. Were those people experienced in writing / reviewing PEPs?
Shall I just reject PEP 3153 so it doesn't distract people? Of course we can still refer to it when people ask for a rationale for the separation between transports and protocols, but it doesn't seem the PEP itself is going to be finished (correct me if I'm wrong), and as it stands it is not useful as a software specification.
Probably the yield-from thread; or the Twisted/Deferred thread.
Agreed that we needn't constantly worry about it. It should be enough to have some kind of reality check closer to PEP accept time.
That's why we're discussing it here.
- It requires a lot of very experienced manpower.
It also requires (a certain level of) *agreement* between people with different preferences, since it's no good if the community fragments or the standard solution gets ignored by Twisted and Tornado, for example. Ideally those packages (that is, their Python 3.4 versions) would build on and extend the standard API, and for "boring" stuff (like possibly the event loop) they would just use the standard solution.
- It requires a lot of effort to handle the hashing out of it (as we're doing here) as well as it deserves to be.
Right.
I'll take as proactive a role as I can afford to take in this process, but I don't think I can do it by myself.
I hope I didn't come across as asking you that! I am just hoping that you can give some concrete, working example code showing how to do protocols and transports.
A repeat of what? Of the failure of PEP 3153? Don't worry about that. This time around I'm here, and since then I have got a lot of experience implementing and using a solid async library (albeit of a quite different nature than the typical socket-based stuff that most people do).
Insight in the right way to support SSL would be huge; it is an excellent example of a popular transport that does *not* behave like sockets, even though its abstract conceptual model is similar (a setup phase, followed by two bidirectional byte streams).
Famous last words. :-) -- --Guido van Rossum (python.org/~guido)

On Sun, Oct 14, 2012 at 4:39 AM, Guido van Rossum <guido@python.org> wrote:
Odd. Were those people experienced in writing / reviewing PEPs?
There were a few. Some of them were. Unfortunately the prevalent reason was politics: "make it clear that you're not just trying to get twisted in the stdlib". Given that that's been suggested both on and off-list, both now and then, I guess that wasn't entirely unreasonable (but not providing things to play with was -- the experience was just so bad I pretty much never got there).
I'm not sure that's necessary; these threads show a lot of willpower to get it done (even though that's not enough), and it's pretty easy to edit. You're certainly right that right now it's not a useful software spec; but neither would an empty new PEP be ;) --Guido van Rossum (python.org/~guido)
cheers lvh

On Sat, Oct 13, 2012 at 1:54 PM, Laurens Van Houtven <_@lvh.cc> wrote:
Could not agree more.
- It requires a lot of very experienced manpower.
I'm sitting on the sidelines, wishing I had much of either, because of point number 1.
I like this idea. There are some problems spare time isn't enough to solve. I can't think of many people as qualified for the task.
-- Read my blog! I depend on your acceptance of my opinion! I am interesting! http://techblog.ironfroggy.com/ Follow me if you're into that sort of thing: http://www.twitter.com/ironfroggy

On Sat, Oct 13, 2012 at 1:22 AM, Guido van Rossum <guido@python.org> wrote:
At the time, the people I talked to placed significantly more weight in "explain why this is necessary" than "get me something I can play with".
Just examples of how it would work, nothing hooked up to real code. My memory of it is more of a drowning-in-politics-and-bikeshedding kind of thing, unfortunately :) Either way, I'm okay with letting bygones be bygones and focus on how we can get this show on the road.
See above. What thread should I reply in about the pull APIs?
I just want to make sure that we don't *completely* paint ourselves into the wrong corner when it comes to that.
I don't think we have to worry about it too much. Any reasonable API I can think of makes this completely doable. But I'm really hoping you'll make good on your promise of redoing
async-pep, giving some actual specifications and example code, so I can play with it.
Takeaways: - The async API of the future is very important, and too important to be left to chance. - It requires a lot of very experienced manpower. - It requires a lot of effort to handle the hashing out of it (as we're doing here) as well as it deserves to be. I'll take as proactive a role as I can afford to take in this process, but I don't think I can do it by myself. Furthermore, it's a risk nobody wants to take: a repeat performance wouldn't be good for anyone, in particular not for Python nor myself. I've asked JP Calderone and Itamar Turner-Trauring if they would be interested in carrying this forward professionally, and they have tentatively said yes. JP's already familiar with a large part of the problem space with the implementation of the ssl module. JP and Itamar have worked together for years and have recently set up a consulting firm. Given that this is emphatically important to Python, I intend to apply for a PSF grant on their behalf to further this goal. Given their experience in the field, I expect this to be a fairly low risk endeavor.
-- --Guido van Rossum (python.org/~guido)
-- cheers lvh

On Sat, Oct 13, 2012 at 10:54 AM, Laurens Van Houtven <_@lvh.cc> wrote:
Odd. Were those people experienced in writing / reviewing PEPs?
Shall I just reject PEP 3153 so it doesn't distract people? Of course we can still refer to it when people ask for a rationale for the separation between transports and protocols, but it doesn't seem the PEP itself is going to be finished (correct me if I'm wrong), and as it stands it is not useful as a software specification.
Probably the yield-from thread; or the Twisted/Deferred thread.
Agreed that we needn't constantly worry about it. It should be enough to have some kind of reality check closer to PEP accept time.
That's why we're discussing it here.
- It requires a lot of very experienced manpower.
It also requires (a certain level of) *agreement* between people with different preferences, since it's no good if the community fragments or the standard solution gets ignored by Twisted and Tornado, for example. Ideally those packages (that is, their Python 3.4 versions) would build on and extend the standard API, and for "boring" stuff (like possibly the event loop) they would just use the standard solution.
- It requires a lot of effort to handle the hashing out of it (as we're doing here) as well as it deserves to be.
Right.
I'll take as proactive a role as I can afford to take in this process, but I don't think I can do it by myself.
I hope I didn't come across as asking you that! I am just hoping that you can give some concrete, working example code showing how to do protocols and transports.
A repeat of what? Of the failure of PEP 3153? Don't worry about that. This time around I'm here, and since then I have got a lot of experience implementing and using a solid async library (albeit of a quite different nature than the typical socket-based stuff that most people do).
Insight in the right way to support SSL would be huge; it is an excellent example of a popular transport that does *not* behave like sockets, even though its abstract conceptual model is similar (a setup phase, followed by two bidirectional byte streams).
Famous last words. :-) -- --Guido van Rossum (python.org/~guido)

On Sun, Oct 14, 2012 at 4:39 AM, Guido van Rossum <guido@python.org> wrote:
Odd. Were those people experienced in writing / reviewing PEPs?
There were a few. Some of them were. Unfortunately the prevalent reason was politics: "make it clear that you're not just trying to get twisted in the stdlib". Given that that's been suggested both on and off-list, both now and then, I guess that wasn't entirely unreasonable (but not providing things to play with was -- the experience was just so bad I pretty much never got there).
I'm not sure that's necessary; these threads show a lot of willpower to get it done (even though that's not enough), and it's pretty easy to edit. You're certainly right that right now it's not a useful software spec; but neither would an empty new PEP be ;) --Guido van Rossum (python.org/~guido)
cheers lvh

On Sat, Oct 13, 2012 at 1:54 PM, Laurens Van Houtven <_@lvh.cc> wrote:
Could not agree more.
- It requires a lot of very experienced manpower.
I'm sitting on the sidelines, wishing I had much of either, because of point number 1.
I like this idea. There are some problems spare time isn't enough to solve. I can't think of many people as qualified for the task.
-- Read my blog! I depend on your acceptance of my opinion! I am interesting! http://techblog.ironfroggy.com/ Follow me if you're into that sort of thing: http://www.twitter.com/ironfroggy
participants (3)
-
Calvin Spealman
-
Guido van Rossum
-
Laurens Van Houtven