SAGIRI-kawaii / sagiri-bot

基于Graia Ariadne和Mirai的QQ机器人 SAGIRI-BOT

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Bug Report]引入锁,限制请求的并发数

FuYon opened this issue · comments

环境信息

系统版本: ubuntu20.04
其他信息: sagiri bot 3.0.3, sqlite3.33.0

问题描述

抛开修改超时设置,是个挺棘手的问题感觉
参考一下
sqlite3.OperationalError
OperationalError: database is locked
sqlite 超时时间设置
引入锁,限制请求的并发数
漫谈SQLite
日志

[ERROR | sagiri_bot.core.app_core:bot_launch_init:191 - Traceback (most recent call last):
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
self.dialect.do_execute(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 100, in execute
self._adapt_connection._handle_exception(error)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 229, in handle_exception
raise error
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 82, in execute
self.await
(_cursor.execute(operation, parameters))
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 76, in await_only
return current.driver.switch(awaitable)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 129, in greenlet_spawn
value = await result
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/cursor.py", line 37, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/cursor.py", line 31, in _execute
return await self._conn._execute(fn, *args, **kwargs)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/core.py", line 129, in _execute
return await future
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/core.py", line 102, in run
result = function()
sqlite3.OperationalError: database is locked

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/ubuntu/BOTS/sagiri-bot-Ariadne/sagiri_bot/core/app_core.py", line 161, in bot_launch_init
await orm.update(Setting, [], {"active": False})
File "/home/ubuntu/BOTS/sagiri-bot-Ariadne/sagiri_bot/orm/async_orm.py", line 116, in update
await self.execute(update(table).where(*condition).values(**dt))
File "/home/ubuntu/BOTS/sagiri-bot-Ariadne/sagiri_bot/orm/async_orm.py", line 52, in execute
raise e
File "/home/ubuntu/BOTS/sagiri-bot-Ariadne/sagiri_bot/orm/async_orm.py", line 46, in execute
result = await session.execute(sql, **kwargs)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/ext/asyncio/session.py", line 211, in execute
return await greenlet_spawn(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 134, in greenlet_spawn
result = context.throw(*sys.exc_info())
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1692, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1614, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
ret = self._execute_context(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
self.handle_dbapi_exception(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in handle_dbapi_exception
util.raise
(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise

raise exception
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
self.dialect.do_execute(
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 100, in execute
self._adapt_connection._handle_exception(error)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 229, in handle_exception
raise error
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 82, in execute
self.await
(_cursor.execute(operation, parameters))
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 76, in await_only
return current.driver.switch(awaitable)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 129, in greenlet_spawn
value = await result
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/cursor.py", line 37, in execute
await self._execute(self._cursor.execute, sql, parameters)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/cursor.py", line 31, in _execute
return await self._conn._execute(fn, *args, **kwargs)
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/core.py", line 129, in _execute
return await future
File "/root/miniconda3/envs/sagiri/lib/python3.8/site-packages/aiosqlite/core.py", line 102, in run
result = function()
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL: UPDATE setting SET active=?]
[parameters: (0,)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)

fixed