await asyncio.sleep(10) 一段时间后不工作

问题描述 投票:0回答:0

我有一个异步函数,它需要一个字符串用户和一个字符串消息当用户键入开始时,它会提出一个问题并休眠并等待答案。有时在 6 个问题之后,

await.sleep(10)
停止工作并打印超时函数的答案,而实际上没有等待 10 秒。我不知道是什么原因造成的。无论用户输入多少次开始提出问题,我都希望它等待。

class MyBot:
    def __init__(self):
        self.state = 'waiting_for_start'
        self.question = ''
        self.answer = ''

    async def on_message(self, user, message):
        if self.state == 'waiting_for_start':
            if message == 'start':
                # gets question/answer
                self.question = 'What is the capital of France?'
                self.answer = 'Paris'
                # ask question
                await self.send_message(self.question)
                self.state = 'waiting_for_answer'
                asyncio.create_task(self.timeout())
        elif self.state == 'waiting_for_answer':
            if message == self.answer:
                # says congrats and awards user points
                await self.send_message(f'Congratulations {user}! You have earned 10 points.')
                self.reset()
            else:
                # continue waiting for answer
                pass

    async def timeout(self):
        await asyncio.sleep(10)
        if self.state == 'waiting_for_answer':
            # prints times up and displays answer
            await self.send_message(f'Time\'s up! The answer was {self.answer}.')
            self.reset()

    def reset(self):
        # resets question/answer
        self.question = ''
        self.answer = ''
        self.state = 'waiting_for_start'

我希望

await asyncio.sleep(10)
在几个问题后继续工作,而不是直接跳到答案

python asynchronous python-asyncio user-input state-machine
© www.soinside.com 2019 - 2024. All rights reserved.