Alex_Wells
@Alex_Wells
PHP/Kotlin

ES7 -> python side by side?

Здравствуйте. Нужно быстро освоить питон, а точнее его способности в асинхронности. Работал с JS ES7, async/await в т.ч., поэтому спрошу: существует ли side by side сравнение кода на JS ES7 и питоне? Таким образом разобраться в языке будет намного проще.

Заранее спасибо.
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
@asd111
async/await появился с версии 3.5. Для http есть отдельный aiohttp.
https://asyncio.readthedocs.io/en/latest/
https://aiohttp.readthedocs.io/en/stable/
Выглядит примерно так:

ASYNCIO:
import asyncio

async def say(what, when):
    await asyncio.sleep(when)
    print(what)

async def stop_after(loop, when):
    await asyncio.sleep(when)
    loop.stop()


loop = asyncio.get_event_loop()

loop.create_task(say('first hello', 2))
loop.create_task(say('second hello', 1))
loop.create_task(say('third hello', 4))
loop.create_task(stop_after(loop, 3))

loop.run_forever()
loop.close()


AIOHTTP CLIENT:
import aiohttp
import asyncio
import async_timeout

async def fetch(session, url):
    with async_timeout.timeout(10):
        async with session.get(url) as response:
            return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, 'http://python.org')
        print(html)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())


AIOHTTP SERVER:
from aiohttp import web

async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)

app = web.Application()
app.router.add_get('/', handle)
app.router.add_get('/{name}', handle)

web.run_app(app)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы