Перемещение на страницу test?x=a
, определенную ниже.Cherrypy + sqlite3 + Peewee падает, когда два процесса выполняют один и тот же код одновременно
Переход к 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, но у меня не было примера, что бы воспроизвести проблему.
Спасибо. Документация рекомендует: http://peewee.readthedocs.org/en/2.0.2/peewee/cookbook.html#multi-threaded-applications – stenci