从Python Discord机器人程序中的线程发送消息



Im正在使用discord.py库,并正在开发一个discordbot。

基本上,我需要我的机器人每小时去一个网站,获取一些关于硒的信息。我想在一个线程中这样做,以避免在信息收集过程中阻塞机器人。

@tasks.loop(hours=1)
async def getwebsiteinfo(self):
thr = threading.Thread(target=self.getwebsiteinfofunc)
thr.start()

getwebsiteinfofunc:

def getwebsiteinfofunc(self):
...
channel.send(f"```sometext```")
..

问题是:channel.send需要用await调用,但我不能用await来调用它,因为它不在异步函数中。

但是我不能将getwebsiteinfofunc定义为async,因为我不能将async函数与线程一起使用。

我尝试过asyncio,但从未使用过,结果失败了。

有什么想法吗?

如果你用async编写整个任务,它不会阻塞机器人的其余部分,asyncio本身允许你在不需要线程的情况下编写并发任务。

许多同步库都有aio替代方案,例如,使用aiohttp客户端来代替requests库。

最新更新