【问题标题】:Cherrypy + sqlite3 + Peewee crashes when two processes execute the same code at the same timeCherrypy + sqlite3 + Peewee 在两个进程同时执行相同的代码时崩溃
【发布时间】: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,但我没有可以重现该问题的示例。

【问题讨论】:

    标签: sqlite cherrypy peewee


    【解决方案1】:

    尝试使用threadlocals=True,而不是check_same_thread=False

    【讨论】:

    猜你喜欢
    • 2017-04-25
    • 2011-01-29
    • 2021-05-13
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多