【发布时间】:2013-08-22 19:37:35
【问题描述】:
这是代码:
def create_game(user_id):
game = classes.Games(user_id = user_id)
game.put()
def get_game(user_id):
game_query = classes.Games.gql('WHERE user_id = :1', user_id)
game = False
for item in game_query:
game = item
if not game:
create_game(user_id)
get_game(user_id)
else:
return game
def render_page(self):
message = 'this is a game page<br>'.decode('utf-8')
user = creditentials.get_user(self)
if not user:
self.redirect('/')
return
game = get_game(user.key().id())
message += 'current game ID: '.decode('utf-8') + str(game.key().id())
self.response.write(message)
我希望它只创建一个游戏实例,但它会创建 10 个!显然,GQL 查询是异步执行的,从get_game(user_id) 的第三个(?)实例开始,它只是跳过了game_query = classes.Games.gql('WHERE user_id = :1', user_id) 行。
我说的对吗?我该如何避免这种情况?
【问题讨论】:
-
呃,我想你不明白异步是什么意思:这并不意味着它随机跳过代码行。这些函数究竟是从哪里调用的?
-
您希望
game成为全球性的吗?这是本地的;create_game或get_game的每次调用都有自己的game变量。 (此外,您可能希望在not game案例中返回一些内容。) -
@DanielRoseman 不是随机的,只是正在进行的。添加了调用之前发布的函数的
render_page()函数 -
@user2357112 不,我不需要它是全局的,是的,我希望它能够返回游戏
标签: python google-app-engine python-2.7 asynchronous gqlquery