Python 3.5 асинхронное ключевое слово

Я сейчас смотрю в pulsar для асинхронного HTTP-клиента.

Следующий пример находится в документации:

from pulsar.apps import http

async with http.HttpClient() as session:
    response1 = await session.get('https://github.com/timeline.json')
    response2 = await session.get('https://api.github.com/emojis.json')

но когда я пытаюсь выполнить это, я получаю

async with http.HttpClient() as session:
         ^ SyntaxError: invalid syntax

Похоже, async Ключевое слово не распознано. Я использую Python 3.5.

Рабочий пример:

import asyncio

from pulsar.apps.http import HttpClient

async def my_fun():
                    async with HttpClient() as session:
                        response1 = await session.get('https://github.com/timeline.json')
                        response2 = await session.get('https://api.github.com/emojis.json')

                    print(response1)
                    print(response2)


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

1 ответ

Решение

Вы можете использовать только async with внутри сопрограмм, так что вы должны сделать это

from pulsar.apps.http import HttpClient
import pulsar

async def my_fun():
    async with HttpClient() as session:
        response1 = await session.get('https://github.com/timeline.json')
        response2 = await session.get('https://api.github.com/emojis.json')
    return response1, response2 

loop  =  pulsar.get_event_loop() 
res1, res2 = loop.run_until_complete(my_fun()) 
print(res1)
print(res2)

внутренне пульсар использует asyncio, поэтому вам не нужно явно импортировать его, используйте его через пульсар


в качестве примечания: если вы обновитесь до Python 3.6, вы можете использовать асинхронный список / набор / и т.д.

from pulsar.apps.http import HttpClient
import pulsar

async def my_fun():
    async with HttpClient() as session:
        urls=['https://github.com/timeline.json','https://api.github.com/emojis.json']
        return [ await session.get(url) for url in urls]

loop  =  pulsar.get_event_loop() 
res1, res2 = loop.run_until_complete(my_fun()) 
print(res1)
print(res2)
Другие вопросы по тегам