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