[Python-Dev] Pythonic concurrency
Jim Fulton
jim at zope.com
Fri Oct 7 23:07:58 CEST 2005
Shane Hathaway wrote:
> Antoine Pitrou wrote:
>
>>A relational database has a very strict and regular data model. Also, it
>>has transactions. This makes it easy to precisely define concurrency at
>>the engine level.
>>
>>To apply the same thing to Python you would at least need :
>> 1. a way to define a subset of the current bag of reachable objects
>>which has to stay consistent w.r.t. transactions that are applied to it
>>(of course, you would have several such subsets in any non-trivial
>>application)
>> 2. a way to start and end a transaction on a bag of objects (begin /
>>commit / rollback)
>> 3. a precise definition of the semantics of "consistency" here : for
>>example, only one thread could modify a bag of objects at any given
>>time, and other threads would continue to see the frozen, stable version
>>of that bag until the next version is committed by the writing thread
>>
>>For 1), a helpful paradigm would be to define an object as being the
>>"root" of a bag, and all its properties would automatically and
>>recursively (or not ?) belong to this bag. One has to be careful that no
>>property "leaks" and makes the bag become the set of all reachable
>>Python objects (one could provide a means to say that a specific
>>property must not be transitively put in the bag). Then, use
>>my_object.begin_transaction() and my_object.commit_transaction().
>>
>>The implementation of 3) does not look very obvious ;-S
>
>
> Well, I think you just described ZODB. ;-) I'd be happy to explain how
> ZODB solves those problems, if you're interested.
>
> However, ZODB doesn't provide locking, and that bothers me somewhat. If
> two threads try to modify an object at the same time, one of the threads
> will be forced to abort, unless a method has been defined for resolving
> the conflict. If there are too many writers, ZODB crawls. ZODB's
> strategy works fine when there aren't many conflicting, concurrent
> changes, but the complex locking done by relational databases seems to
> be required for handling a lot of concurrent writers.
I don't think it would be all that hard to use a locking (rather than
a time-stamp) strategy for ZODB, although ZEO would make this
extra challenging.
In any case, the important thing to agree on here is that transactions
provide a useful approach to concurrency control in the case where
- separate control flows are independent, and
- we need to mediate access to shared resources.
Someone else pointed out essentially the same thing at the beginning
of this thread.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Python-Dev
mailing list