同期方式でデータをアップロードする高速非同期RESTインターフェイス呼び出しを実装しています。現時点では、非同期の方法でPythonページを呼び出し、遅延を測定する非同期フレームワークを構築しようとしています。私は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))
:ここ
は、コード(後述のように動作しません)です。私はそれが同時にすべての応答を待つ作るために task = perform_call(session)
tasks.append(task)
responses = asyncio.gather(*tasks)
await responses
と交換した場合、私は下のエラーを取得:
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host python.org:80 ssl:False [Network is unreachable]
私はjupyterノートブックからのコードとしてこれを実行しようとした、そして、実行されなかったので、それを通常のコードにコピーしました。いずれの場合も、Python 3.5で動作しました。残念ながら、私は問題の解決策を見つけることができませんでした。私が収集を試みるとすぐにネットワークにアクセスできないようです。誰もそれがうまくいかない理由を提案していますか?私はどんな提案にも満足しています。