[Pythonmac-SIG] appscript terminology caching

Bob Ippolito bob at redivi.com
Tue Oct 19 21:29:56 CEST 2004


On Oct 19, 2004, at 15:15, Eric Nieuwland wrote:

> On 19-okt-04, at 17:51, Bob Ippolito wrote:
>> On Oct 19, 2004, at 11:44, Eric Nieuwland wrote:
>>> Would adding a parameter with values 'always', 'if there is none', 
>>> 'never' to control when the terminology is to be generated do the 
>>> trick?
>>
>> How is that better than having the option to explicitly "freeze" a 
>> terminology into an importable python module?
>>
>> Remember - the ONLY reason to cache terminologies is to save ~0.5 
>> seconds per run.  If you have a script that you need to run very 
>> often or redistribute, you can spend a minute to freeze the 
>> terminology.
>
> Well, why not optionally freeze the terminology in advance into a 
> specific area like .../site-packages/terminology. Let's call it a 
> cache to keep has happy.
> Then, from your program you could use (extending has' example):
>
> 	itunes = app('eppc://20.20.20.20/iTunes', 
> usingtermsfrom='iTunes.app', terminology=X)
>
> where X is:
> 	frozen		to get Bob's preferred system
> 	cached		to get has' idea
> 	application	to always obtain the terminology from the current 
> application (possibly putting in the cache)

But *why* put it there?  Why not with your application?  You need admin 
access to touch site-packages, and considering that multiple 
terminology-using applications and possibly multiple users would use 
the same cache area makes it rather problematic.

I'm not at all convinced that it's worth doing.  For the cases where 
you need the efficiency, you freeze it to a particular python module 
named whatever you want, wherever you need it to be.  This has the 
added bonus of being discoverable by dependency walking (mostly 
packaging) utilities since you will be importing it explicitly.  
Otherwise, you look it up dynamically and take the speed hit.  Why make 
it more complicated?

The only situation I can come up with where you would really notice is 
if you had some throwaway python script that you were spawning a whole 
bunch of times to do something (a la shell script).  The solution is to 
not do that.  Make the script long-running and take a bunch of 
parameters on argv or from stdin, or make it a module and use it 
directly from the calling script (assuming its Python as well).  Either 
way will be a whole heck of a lot faster because (a) you've make the 
terminology lookup constant time (b) you've made the python interpreter 
startup/shutdown constant time.

-bob



More information about the Pythonmac-SIG mailing list