Я пытаюсь переписать свой код, чтобы сделать его асинхронным, для часто операций ввода / вывода (запросы MySQL) я использую библиотеку aiomysql
. Чтобы предотвратить в будущем исключения key error
и т. Д., Я преобразовываю словарь в объект, устанавливая ключи и значения в качестве атрибутов. Но я столкнулся с проблемой, когда сопрограмма возвращает список в объекте списка [[]], а не просто объект списка.
- создание генератора из списка в функции не работает, я получаю исключения
Вывод в функции с print()
[<sqlobject.SQLObject object at 0x7f75a52476a0>,
<sqlobject.SQLObject object at 0x7f75a5247668>,
<sqlobject.SQLObject object at 0x7f75a52476d8]
Вывод вне сопрограммы после понимания списка
[[<sqlobject.SQLObject object at 0x7f75a52476a0>,
<sqlobject.SQLObject object at 0x7f75a5247668>,
<sqlobject.SQLObject object at 0x7f75a52476d8>
]]
# Dict to class converter
@asyncio.coroutine
def selectall(self, loop, stmt, *args):
try:
with (yield from self.pool) as conn:
cursor = yield from conn.cursor(aiomysql.DictCursor)
yield from cursor.execute(stmt, *args)
rows = yield from cursor.fetchall()
new_items = [SQLObject(x) for x in rows]
results = yield from new_items
return results
except:
raise
# Result in loop executioner
result = loop.run_until_complete(
asyncio.gather(pool_obj.selectall(loop, stmt)))