python - 使用 discord.py 在单独的线程中发送消息?
问题描述
我正在为我的不和谐机器人编写命令(/mc
,/
是前缀)以获取结果并发送消息。但是得到结果需要很多时间。为了防止一次多个请求,我将获取结果的代码放在一个单独的函数mainmc()
(不是async
)中,并mainmc
通过创建一个新类来启动线程并作为线程调用mainThreadMC(threading.Thread)
,并创建一个新的类对象并启动它,这样当有多个请求时,该命令将立即运行,而无需等待前一个请求。但是在我运行它之后很快,我发现它是不可能的,因为发送消息需要await
,否则它将无法工作。但是如果你await
在一个函数中有这个函数需要async
。这意味着我必须编辑模块threading
让它工作?当然,这不是这样做的方法。但是我该怎么办?
这是代码(简化):
class mainThreadMC(threading.Thread):
def __init__(self, threadID, name, ctx,args):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.args = args
self.ctx = ctx
def run(self):
logger.info("Starting " + self.name)
mainmc(self.ctx,self.args)
logger.info(f'Exiting {self.name}')
def mainmc(ctx,args):
# fetching data... creating / editing variable embed
ctx.send(embed=embed) #ERROR!!!!!!!!!!!
# finalize...
return
@bot.command(name='mc',pass_content=True)
async def mc(ctx,*,args=""):
global runno
threadMainMC = mainThreadMC(runno,f"MainMC_{str(runno)}",ctx,args)
threadMainMC.start()
(我只是想让它工作,所以如果你有一些替代解决方案,你也可以告诉我。)
感谢您的帮助。
解决方案
推荐阅读
- sum - 具有该字段的 where 条件的字段总和 - Influxdb
- php - Htaccess RewriteRule 给出内部服务器错误
- powerapps - 是否可以在 powerapps 的下拉列表中自定义文本?
- mysql - 将 Azure SQL 表中的数据链接并导出到我的 SQL 表
- elasticsearch - Elasticsearch:通过数组属性搜索多个文档
- c# - .NET Core 无法连接到 SQL DB
- system-verilog - 如何在垃圾收集时执行 SystemVerilog 代码?
- python - 如何使用 selenium 抓取网页 - find_element_by_link_text
- layout - Flutter:如何使Container的宽度等于Stackview的宽度?
- amazon-web-services - 我应该把 aws cloudfront 放在 ELB 前面吗?