Ошибка 'async_generator' object is not iterable
У меня при выполнении кода выходит такая ошибка 'async_generator' object is not iterable, как я понял все из-за функции перебора данных, но в чем именно причина я разобраться не могу, прошу помогите мне
Код:
import asyncio
import aiohttp
import config
import mysql.connector
from mysql.connector import Error
from read_sql_config import read_db_config
import aiomysql
db_config = read_db_config()
class AsyncIterator:
def __init__(self, seq):
self.iter = iter(seq)
def __aiter__(self):
return self
async def __anext__(self):
try:
return next(self.iter)
except StopIteration:
raise StopAsyncIteration
# Перебор полученных данных с БД
async def iter_row():
# инициализируем соединение с БД
conn = await aiomysql.connect(**db_config)
cursor = await conn.cursor()
await cursor.execute("SELECT * FROM users")
while True:
rows = await cursor.fetchmany(300)
if not rows:
break
async for row in AsyncIterator(rows):
yield row
async def make_request(session, user_id, telegram_id):
print(f"Id пользователя: {user_id} отправка: {telegram_id}")
async with session.get(f'https://api.telegram.org/bot{config.api_token}/sendMessage?',
params={
'chat_id': telegram_id,
'text': ("Тестовое сообщение")
}) as resp:
if resp.status == 200:
print('Работает')
if resp.status == 400:
print('Ошибка')
async def main():
rows = iter_row()
async with aiohttp.ClientSession() as session:
await asyncio.gather(
*[make_request(session, row[0], row[1]) for row in rows]
)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Ответы (1 шт):
Автор решения: eri
→ Ссылка
iter_row - это async_generator по нему можно пройтись через async for
async def main():
rows = iter_row()
async with aiohttp.ClientSession() as session:
await asyncio.gather(
*[make_request(session, row[0], row[1]) async for row in rows]
)