работа с aiohttp client

108 views
Skip to first unread message

Rick Deckard

unread,
Oct 25, 2015, 4:40:17 AM10/25/15
to aio-libs
пример парсинга курса валют


import aiohttp
import asyncio
import xml.etree.ElementTree as ET


async
def currencyRatesFromCBR():
 result
= {
 
"USD": 1,
 
"EUR": 1,
 
}
 async
with aiohttp.get("http://www.cbr.ru/scripts/XML_daily.asp") as resp:
 
assert resp.status == 200
 tree
= ET.fromstring(await resp.text())
 
for v in tree.iter("Valute"):
 code
= v.find("CharCode").text
 
if code in result:
 result
[code] = float(v.find("Value").text.replace(",", "."))
 
return result


async
def main():
 
print(await currencyRatesFromCBR())


asyncio
.get_event_loop().run_until_complete(main())



вопрос - я реализовал currencyRatesFromCBR() если убрать у нее async то интерпретатор ругается на ошибку синтаксиса.
если не убирать то 
приходится писать 

async def main():
 
print(await currencyRatesFromCBR())

а такое не работает

def main():
 
print(currencyRatesFromCBR())

и что теперь придется в каждой функции где хоть как то используется асинхронность писать async await?
или я чтото не так использую?

вобщем вопрос - как реализовать синхронную функцию с асинхронной загрузкой данных - или это в принципе не возможно?

Andrew Svetlov

unread,
Oct 25, 2015, 6:24:08 AM10/25/15
to aio-libs
def main():
    loop.run_until_complete(currencyRatesFromCBR())

Без run_until_complete -- никак. Хоть с async/await хоть с @coroutine/yield from
Reply all
Reply to author
Forward
0 new messages