将异步函数传递给线程python

时间:2020-03-20 22:07:29

标签: python multithreading discord.py

我正在构建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()

我不知道这两种解决方案有什么问题

0 个答案:

没有答案