我正在为discord bot编写一个命令(/mc
,/
是前缀),以获取结果并发送消息。但是获得结果需要很多时间。为了防止一次出现多个请求,我将获取结果的代码放在一个单独的函数mainmc()
(而不是async
)中,通过创建一个新类mainThreadMC(threading.Thread)
来启动线程,并创建一个新的类对象并启动它,从而将mainmc
作为线程调用,因此,当有多个请求时,命令将立即运行,而无需等待前一个请求。但是在我运行它之后,我很快发现它是不可能的,因为发送消息需要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()
(我只是想让它发挥作用,所以如果您有其他解决方案,也可以告诉我。)
谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐