【问题标题】:discord.py using `with sqlite3.connection` a bad idea?discord.py 使用 `with sqlite3.connection` 是个坏主意?
【发布时间】: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


    【解决方案1】:

    最好使用异步 SQLite 模块 aiosqlite

    【讨论】:

    • 感谢您的建议!我不知道它的存在。它的工作方式是否与 sqlite 相同,只是具有更多的异步功能?
    • 我不知道更多函数,但每个函数都是异步的,语法大体相同
    • 好的,谢谢。我还有一个问题。我在网上找不到答案,但对于stackoverflow来说这似乎也不是一个好问题,所以我希望你能回答它(但如果你不回答也没关系)。我应该与我的数据库建立一个连接并在每次需要时使用它,还是应该每次需要时都建立一个连接?
    • 每次需要时使用新连接并在一次性工作完成后关闭它
    • 好的,但这不会阻止我锁定数据库吗?对不起,如果我错了
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多