App Engine Django非相关竞争条件

时间:2012-11-16 19:22:50

标签: python django google-app-engine race-condition

我目前正在使用django非rel网页框架开发谷歌应用引擎应用。我有一种方法可以将钱从一个账户转移到另一个账户,这很简单。当我使用调试器在我的本地服务器上运行它时,它工作得很好,并正确地转移所有的钱。但是,当我在app引擎上远程运行它时,我最终得到了奇怪的负值。该方法的关键是:

pubAccount.secondary_money = pubAccount.secondary_money + transaction.money
pubAccount.money = pubAccount.money - transaction.money

经过广泛的研究后,我发现这可能是因为我使用交易意味着转移绝不是原子的,因此可能会出现竞争条件。但是django non-rel不能正确支持事务,并且它支持的部分不是由app引擎直接支持的,并且从我发现的内容来看,django non-rel不支持python-app引擎工具包支持的任何内容。

所以有人可以告诉我如何使用django non-rel在app引擎上进行交易!? 有人必须让它在那里工作!

1 个答案:

答案 0 :(得分:1)

简单,使用db.run_in_transaction()

修改

如果有帮助,这里是我使用的分支,运行django-1.4,支持祖先查询。

https://github.com/dragonx/djangoappengine.git -> django-1.4 branch
https://github.com/dragonx/django-1.4.git -> 1.4-nonrel branch
https://github.com/dragonx/djangotoolbox.git -> features/django-1.4 branch
https://github.com/dragonx/django-dbindexer.git -> develop branch (although the 1.4wip branch looks better)