我正在构建Discord机器人,其中大部分是基于事件的。僵尸程序就绪后,我希望有一个线程,在僵尸程序处于活动状态时,有时会在聊天中写“ hi”,然后睡眠2分钟。代码:
async def on_ready(self):
t = threading.Thread(target=self.say_hi)
t.start()
async def say_hi(self):
while True:
chance = random.randint(0, 101)
if chance <= 25:
await self.channel.send('hi')
time.sleep(60 * 2)
问题是我得到了不同的错误。 RuntimeWarning: Enable tracemalloc to get the object allocation traceback
在这种情况下。我尝试按照以下方式this somewhat related answer编辑代码:
def say_hi(self):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(self.say_hi_aux())
loop.close()
async def say_hi_aux(self):
while True:
chance = random.randint(0, 101)
if chance <= 25:
await self.channel.send('hi')
await asyncio.sleep(60 * 2)
但是在RuntimeError: Timeout context manager should be used inside a task
方法上产生的错误是loop.run_until_complete()
。
我不知道这两种解决方案有什么问题