SIngleton from __defaults__

Ned Batchelder ned at nedbatchelder.com
Wed Jan 22 14:18:19 EST 2014


On 1/22/14 11:37 AM, Asaf Las wrote:
> On Wednesday, January 22, 2014 6:18:57 PM UTC+2, Chris Angelico wrote:
>> On Thu, Jan 23, 2014 at 3:07 AM, Asaf Las <r.... at gmail.com> wrote:
>>
>> Why not simply:
>> def get_singleton(x = SomeClass()):
>>      return x
>> Or even:
>> singleton = SomeClass()
>> ? Neither of the above provides anything above the last one, except
>> for late creation.
>>
>> ChrisA
>
> Actually need was to have some interface to running independent threads
> to give same and once created object always.
>
> For first  - SomeClass's object will be created whenever there will be
> call to get_singleton().

No, the value for a function argument's default is computed once when 
the function is defined.  Chris is right: get_singleton will always 
return the same object.

> For second, again it is free to create it whenever someone (thread)
> wish.

Chris is right here, too: modules are themselves singletons, no matter 
how many times you import them, they are only executed once, and the 
same module object is provided for each import.

>
> Hmmm, use case was to create persistent counter in multithreaded app
> accessing single file where incrementing integer is stored.
> When my imagination expanded it onto multiprocessing mess i ended up
> using sqlite access to DB in exclusive transaction mode.
> But this was not pythonic :-)
>
> Asaf
>


-- 
Ned Batchelder, http://nedbatchelder.com




More information about the Python-list mailing list