我是异步编程的新手。我有一个 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”循环中创建许多任务
我为糟糕的措辞道歉,可能是个愚蠢的问题。我完全是新手