On Thu, 20 May 2010 18:00:43 -0600, Shane Hathaway <sh...@hathawaymix.org>
wrote:
> On 05/20/2010 06:18 AM, Jürgen Herrmann wrote:
>> def myLongRunningMethod(self):
>>
>>    BATCH_SIZE = 10
>>    MAX_CONFLICTS = 3
>>
>>    work_items = [some, work, to , do, ...]
>>    # list of persistent objects to be modified in this method
>>
>>    idx = 0
>>    while idx<  len(work_items):
>>      conflicts = 0
>>      try:
>>        my_batch = work_items[idx, idx+BATCH_SIZE]
>>        for work_item in my_batch:
>>          do_some_work(work_item)
>>        transaction.commit()
>>      except ConflicError:
>>        conflicts += 1
>>        if conflicts>  MAX_CONFLICTS:
>>          raise
>>      else:
>>        idx += BATCH_SIZE
>>
>> does this sound like a reasonable approach?
> 
> More than that, it looks nearly finished. ;-)  The transaction machinery

> does all the heavy lifting, so you don't need to do much.  Issues to
fix:
> 
> - Your code resets the "conflicts" counter in every iteration.  You 
> obviously didn't intend that.
hmm, why not? every batch should be retried up to MAX_CONFLICTS times?
> 
> - You should start each loop with "transaction.begin()" to avoid any 
> side effects of transactions started before the long running method was 
> called.
cool.
> 
> - Writing thorough tests for this kind of code is very important.  If 
> you don't, it might be a while before you discover that ConflictError 
> was misspelled.
actually python wouldn't compile that code above as ConflicError must 
resolve to a class at compile time but i get your point, agreed :)
> 
> Shane

thanks for your answers and have a nice day everbody.

jürgen
-- 
>> XLhost.de - eXperts in Linux hosting ® <<

XLhost.de GmbH
Jürgen Herrmann, Geschäftsführer
Boelckestrasse 21, 93051 Regensburg, Germany

Geschäftsführer: Volker Geith, Jürgen Herrmann
Registriert unter: HRB9918
Umsatzsteuer-Identifikationsnummer: DE245931218

Fon:  +49 (0)800 XLHOSTDE [0800 95467833]
Fax:  +49 (0)800 95467830

WEB:  http://www.XLhost.de
IRC:  #xlh...@irc.quakenet.org
_______________________________________________
Zope maillist  -  Zope@zope.org
https://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to