“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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage