从Python Discord bot中的线程发送消息

时间:2020-09-22 15:32:11

标签: python asynchronous async-await bots discord.py

我正在使用discord.py库并正在开发一个discord机器人。

基本上,我需要我的机器人每小时去一个网站,并获取有关硒的一些信息。 我想在一个线程中执行此操作,以避免在信息收集过程中阻塞机器人。

@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定义为异步,因为我不能将异步函数与线程一起使用。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您以异步方式编写整个任务,则不会阻塞其余的漫游器,而asyncio本身允许您编写并发任务而无需线程。

许多同步库都有aio替代方法,例如,使用aiohttp Client代替requests库。