It's completely undocumented (at this stage, anyway), but definitely
seems to work. A few notes I've come gathered:

 - CPU time quota appears to be calculated based on literal time,
rather than e.g. the UNIX concept of "time spent in running state".

 - I can fetch 100 URLs in 1.3 seconds from a machine colocated in
Germany using the asynchronous API. I can't begin to imagine how slow
(and therefore expensive in monetary terms) this would be using the
standard API.

 - The user-specified callback function appears to be invoked in a
separate thread; the RPC isn't "complete" until this callback
completes. The callback thread is still subject to the request
deadline.

 - It's a standard interface, and seems to have no parallel
restrictions at least for urlfetch and Datastore. However, I imagine
that it's possible restrictions may be placed here at some later
stage, since you can burn a whole lot more AppEngine CPU more cheaply
using the async api.

 - It's "standard" only insomuch as you have to fiddle with
AppEngine-internal protocolbuffer definitions for each service type.
This mostly means copy-pasting the standard sync call code from the
SDK, and hacking it to use pubsubhubub's proxy code.

Per the last point, you might be better waiting for an officially
sanctioned API for doing this, albeit I doubt the protocolbuffer
definitions change all that often.

Thanks for Brett Slatkin & co. for doing the digging required to get
the async stuff working! :)


David.

2009/3/16 peterk <peter.ke...@gmail.com>:
>
> Very neat.. Thank you.
>
> Just to clarify, can we use this for all API calls? Datastore too? I
> didn't look very closely at the async proxy in pubsubhubub..
>
> Asynchronous calls available on all apis might give a lot to chew
> on.. :) It's been a while since I've worked with async function calls
> or threading, might have to dig up some old notes to see where I could
> extract gains from it in my app. Some common cases might be worth the
> community documenting for all to benefit from, too.
>
> On Mar 16, 1:26 pm, David Wilson <d...@botanicus.net> wrote:
>> I've created a Google Code project to contain some batch utilities I'm
>> working on, based on async_apiproxy.py from pubsubhubbub[0]. The
>> project currently contains just a modified async_apiproxy.py that
>> doesn't require dummy google3 modules on the local machine, and a
>> megafetch.py, for batch-fetching URLs.
>>
>>    http://code.google.com/p/appengine-async-tools/
>>
>> David
>>
>> [0]http://code.google.com/p/pubsubhubbub/source/browse/trunk/hub/async_a...
>>
>> --
>> It is better to be wrong than to be vague.
>>   — Freeman Dyson
> >
>



-- 
It is better to be wrong than to be vague.
  — Freeman Dyson

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to