동기식으로 데이터를 업로드하려는 빠른 비동기 REST 인터페이스 호출자를 구현하고 있습니다. 지금은 비동기 방식으로 파이썬 페이지를 호출하고 지연을 측정하는 비동기 프레임 워크를 빌드하려고합니다. 내가aiohttp/asyncio를 사용한 비동기 HTTP 호출이 "호스트에 연결할 수 없습니다 [네트워크에 연결할 수 없습니다."]
await perform_call(session)
를 사용하고 있지만, 분명히 asynchonous 전화를 나누기로 제대로 한 일
import aiohttp
import asyncio
import async_timeout
from timeit import default_timer as timer
async def fetch(session, url):
start = timer()
with async_timeout.timeout(10):
async with session.get(url) as response:
date = response.headers.get("DATE")
end = timer()
delay = end - start
print("{}:{} with delay {} s".format(date, response.url, delay))
return await response.read()
async def bound_call(semaphore, session, url):
async with semaphore:
await fetch(session, url)
async def perform_call(session):
sem = asyncio.Semaphore(1000)
html = await bound_call(sem, session, 'http://python.org')
async def perform_calls(n):
tasks = []
async with aiohttp.ClientSession() as session:
for i in range(n):
task = perform_call(session)
tasks.append(task)
responses = asyncio.gather(*tasks)
await responses
call_number = 10
loop = asyncio.get_event_loop()
loop.run_until_complete(perform_calls(call_number))
: 여기
코드 (아래에 설명 된대로 작동하지 않는)입니다. , 나는 jupyter 노트북의 코드로 이것을 실행하려고aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host python.org:80 ssl:False [Network is unreachable]
, 그리고 : 나는 같은 시간에 모든 응답을 기다리고 만들기 위해
task = perform_call(session)
tasks.append(task)
responses = asyncio.gather(*tasks)
await responses
로 교체하면, 나는 오류가 아래 얻을 실행되지 않았으므로 정상 코드로 복사됩니다. 두 경우 모두 파이썬 3.5에서 돌아갔다. 불행히도, 나는 문제에 대한 해결책을 찾지 못했습니다. 수집을 시도하자마자 네트워크 액세스가없는 것 같습니다. 아무도 왜 그것이 작동하지 않는 제안을합니까? 나는 어떤 제안이라도 기쁘게 생각합니다. .