【发布时间】:2020-08-25 20:28:50
【问题描述】:
我正在开发一个使用 sqlite3 作为我的数据库的 discord.py 机器人。我当前的方法是创建一个名为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 吗?谢谢
【问题讨论】:
标签: python sqlite discord.py