“Async with” in Python 3.4
In den Getting Started-Dokumenten für aiohttp finden Sie das folgende Client-Beispiel:
import asyncio
import aiohttp
async def fetch_page(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
assert response.status == 200
return await response.read()
loop = asyncio.get_event_loop()
with aiohttp.ClientSession(loop=loop) as session:
content = loop.run_until_complete(
fetch_page(session, 'http://python.org'))
print(content)
Und sie geben den folgenden Hinweis für Python 3.4-Benutzer:
Wenn Sie Python 3.4 verwenden, ersetzen Sie wait mit yield from und async def durch einen @coroutine-Dekorator.
Wenn ich diese Anweisungen befolge, erhalte ich:
import aiohttp
import asyncio
@asyncio.coroutine
def fetch(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
return (yield from response.text())
if __name__ == '__main__':
loop = asyncio.get_event_loop()
with aiohttp.ClientSession(loop=loop) as session:
html = loop.run_until_complete(
fetch(session, 'http://python.org'))
print(html)
Dies wird jedoch nicht ausgeführt, daasync with
wird in Python 3.4 nicht unterstützt:
$ python3 client.py
File "client.py", line 7
async with session.get(url) as response:
^
SyntaxError: invalid syntax
Wie kann ich das @ übersetzeasync with
Anweisung, um mit Python 3.4 zu arbeiten?