[Python-ideas] Optimistic Concurrency
Terry Reedy
tjreedy at udel.edu
Fri Oct 17 03:03:48 CEST 2008
Leif Walsh wrote:
> On Tue, Oct 14, 2008 at 1:38 PM, Terry Reedy <tjreedy at udel.edu> wrote:
>> It does not strike me as practical for Python.
>
> Probably true, but let's see....
You persuaded me to rethink this...
>> 1. It starts with copying data. Clients accessing a database server already
>> do this. Threads accessing *shared* data normally do not.
>
> Agreed, but if I want them to, they should (and I should be able to
> tell that to python concisely, and have python understand what that
> means for concurrency).
Suppose shared data consists of mutable collections.
Let the program units that share the date follow this protocol
(discipline) for editing members of a collection.
old_id = id(member)
edit_copy = collection.member # or collection[index/key] or whatever
edit edit_copy
done = False
while not done:
atomically:
if id(edit_copy) == old_id:
collection.member = copy # by reference copy, not data copy
done = True
if done: break
recover(edit_copy)
'Atomically' could be by a very short term lock or perhaps a builtin C
API function if such can run 'atomically' (I just don't know).
I believe this will work if all editors edit at the same level of
granularity. Certainly, mixing levels can easily lead to data loss.
>> 2. Any edit (change) may be discarded in part or in whole. Human operators,
>> informed of the rejection, must (and 'somehow' do) decide what to do.
>> Wrapping every assignment to shared data with a pre-programmed
>> RejectionException handler would usually be a huge burden on the programmer.
>
> It would be a huge burden, but perhaps it could be an option for the
> especially ambitious programmer.
Or the program might ask a human user, which was the use-case for this idea.
More information about the Python-ideas
mailing list