SAGIRI-kawaii / sagiri-bot

基于Graia Ariadne和Mirai的QQ机器人 SAGIRI-BOT
GNU Affero General Public License v3.0
696 stars 83 forks source link

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

Closed FuYon closed 2 years ago

FuYon commented 2 years ago

环境信息

系统版本: 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 _handleexception 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_dbapiexception 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 _handleexception 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)

SAGIRI-kawaii commented 2 years ago

fixed