discord.py使用`with sqlite3.connection` a bad idea?

xe55xuns  于 2023-08-06  发布在  SQLite
关注(0)|答案(2)|浏览(119)

我正在使用discord.pysqlite3作为我的数据库的www.example.com机器人。我目前的方法是有一个名为Database的类,它包含一个sqlite3.connection(.conn)。为了避免引发database locked错误,我使用with db.conn:
我担心的是,由于discord.py是异步工作的,而不是线程工作的,使用这种方式会导致程序阻塞。我的意思是
假设我有两个函数在运行,task1和task2。Task1首先启动,需要大约1分钟才能完成。Task2在之后启动。它们都使用with db.conn来锁定数据库。在task1中的某个地方,我使用了一个await调用,使python从该函数中休息一下,并执行其他异步函数。它到达task2。Task2调用with db.conn:,导致单线程程序锁定,直到task1释放锁定。但是,由于程序在task2中被阻塞,因此它永远不会完成task1。
如果我说得不对或者我完全错了,对不起。我的主要问题是,我应该只使用aysncio.Lock吗?谢啦,谢啦

lokaqttq

lokaqttq1#

最好使用Async SQLite模块aiosqlite

e5njpo68

e5njpo682#

还有另一个名为PostgreLite的模块,它简化了SQL命令,并考虑了异步进程。只需将postgreslite添加到您的需求中或在您的终端中执行pip install postgreslite
Github页面还提供了examples来了解如何使用该库,其他文档应该很快就会添加。
至于discord.py,在event.py文件中,我建议您添加:

db = PostgresLite('database.db')
self.bot.pool = await db.connect_async()

字符串
on_ready()函数中。这样,bot对象也将携带数据库,您将避免每次运行命令时都加载它。

相关问题