Stephen
Mon, 15 Mar 2010 12:02:23 -0700
On Mar 15, 9:28 am, Iap <iap...@gmail.com> wrote: > > The other suggestion is the "transaction". I encountered many exceptions > while putting the step 3.2, 3.3 to a transaction. > Such as "nested transaction is not allowed","Cannot operate on different > entity groups","must be an ancestor...". > Because the transaction has so much limitation, it seems not realistic to > use transaction.
Something like this?
class Queued(db.Model):
done = db.BooleanProprty(required=True, default=False)
order = db.DateTimeProperty(required=True, auto_now_add=True)
work = db.TextProperty() # whatever...
@classmethod
def get_next(cls):
next = None
while next is None:
next = cls.all().filter('done =', False) \
.order('order').fetch(1)
if next is None:
return None
next = cls._mark_done_transactionally(next)
return next
@classmethod
def _mark_done_transactionally(cls, queued):
def txn(queued):
queued = db.Get(queued.key())
if queued.done:
return None
queued.done = True
queued.put()
return queued
return db.run_in_transaction(txn, queued)
some_work_to_do = Queued.get_next()
if some_work_to_do:
print 'Do once: %s' % some_work_to_do.work
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en.