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
库。