0

我是异步编程的新手。我有一个 python 程序应该同时激活一些电报客户端。

现在它在'for'中工作:

    for user in wait_activation:
        user_chat_id = user.chat_id
        phone_number = user.phone_number
        client = Client(
            f'{user_chat_id}',
            api_id=self.api_id,
            api_hash=self.api_hash,
            phone_number=phone_number,
            phone_code_handler=await self.get_confirmation_code(
                client_id=user_chat_id
            )
        )

我有一个自定义电话代码处理程序,它一直等到用户将他的确认代码发送到 Telegram 机器人:

async def get_confirmation_code(self, client_id):
    async def _stab():
        while True:
            wrong_code = await self.redis.smembers('set:code_entered')
            if client_id in wrong_code:
                await asyncio.sleep(0)
                continue
            code = await self.redis.hget(
                'hash:id_conf_code',
                client_id
            )
            if code:
                await self.redis.hdel('hash:id_conf_code', client_id)
                await self.redis.sadd('set:code_entered', client_id)
                break
            await asyncio.sleep(1)
        return code

    return _stab

问题是,如果不止一个人尝试激活客户端,程序就会停止,直到前一个人输入代码。有什么办法可以解决吗?

我考虑了一些create_task但我没有找到任何方法在“for”循环中创建许多任务

我为糟糕的措辞道歉,可能是个愚蠢的问题。我完全是新手

4

0 回答 0