GIL in alternative implementations

Ethan Furman ethan at stoneleaf.us
Tue Jun 7 13:51:00 EDT 2011


Carl Banks wrote:
> On Monday, June 6, 2011 9:03:55 PM UTC-7, Gabriel Genellina wrote:
>> En Sat, 28 May 2011 14:05:16 -0300, Steven D'Aprano  
>> <steve+comp.... at pearwood.info> escribi�:
>>
>>> On Sat, 28 May 2011 09:39:08 -0700, John Nagle wrote:
>>>
>>>> Python allows patching code while the code is executing.
>>> Can you give an example of what you mean by this?
>>>
>>> If I have a function:
>>>
>>>
>>> def f(a, b):
>>>     c = a + b
>>>     d = c*3
>>>     return "hello world"*d
>>>
>>>
>>> how would I patch this function while it is executing?
>> I think John Nagle was thinking about rebinding names:
>>
>>
>> def f(self, a, b):
>>    while b>0:
>>      b = g(b)
>>      c = a + b
>>      d = self.h(c*3)
>>    return "hello world"*d
>>
>> both g and self.h may change its meaning from one iteration to the next,  
>> so a complete name lookup is required at each iteration. This is very  
>> useful sometimes, but affects performance a lot.
> 
> It's main affect performance is that it prevents an optimizer from inlining a function call(which is a good chunk of the payoff you get in languages that can do that).
> 
> I'm not sure where he gets the idea that this has any impact on concurrency, though.

What if f has two calls to self.h() [or some other function], and self.h 
changes in between?

Surely that would be a major headache.

~Ethan~



More information about the Python-list mailing list