【发布时间】:2014-11-09 03:14:41
【问题描述】:
导航到下面定义的页面test?x=a 可以正常工作。
导航到test?x=a,然后快速导航到test?x=b,这两个循环都会持续运行几秒钟,但其中一个最终会崩溃并出现错误peewee.OperationalError: cannot start a transaction within a transaction。
这显然不是真实世界的测试,它是一种重现我偶尔遇到的真实世界问题的方法。
在现实世界的应用程序中,当后台任务运行或用户在文本框上键入并且使用 ajax 快速触发许多请求时,我会看到与此类似的错误。
db = peewee.SqliteDatabase('db', check_same_thread=False)
class Test(peewee.Model):
field = peewee.CharField()
class Meta:
database = db
Test.drop_table(True)
Test.create_table(True)
class MyApp:
@cherrypy.expose
def test(self, x):
for i in range(1000):
Test.create(field='%s %03d' % (x, i))
time.sleep(0.1)
我已经问过this question,但我没有可以重现该问题的示例。
【问题讨论】: