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)