如果我使用Twisted的adbapi的runInteraction,并且在我调用的函数中我做了类似的事情
curs. execute("SELECT id FROM mytable WHERE name='bob'")
id = curs.fetchone()[0]
我是否保证此选择的id或者是否来自其他延迟线程之一?
答案 0 :(得分:0)
延迟是线程安全的,因此您可以得到保证。
示例代码看起来像:
def _getAge(txn, user):
# this will run in a thread, we can use blocking calls
txn.execute("SELECT * FROM foo")
# ... other cursor commands called on txn ...
txn.execute("SELECT age FROM users WHERE name = ?", user)
result = txn.fetchall()
if result:
return result[0][0]
else:
return None
def getAge(user):
return dbpool.runInteraction(_getAge, user)
def printResult(age):
if age != None:
print age, "years old"
else:
print "No such user"
getAge("joe").addCallback(printResult)
来自官方docs。我没有删除任何更清晰和教学的行。