requestsモジュールでasyncioを使用して、非同期 HTTP 要求を作成しています。
次のような GET リクエストを作成できます。
@asyncio.coroutine
def do_checks():
loop = asyncio.get_event_loop()
req = loop.run_in_executor(None, requests.get, 'https://api.github.com/user')
resp = yield from req
print(resp.status_code)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_checks())
ただし、リクエストで Basic HTTP Auth (説明はこちら) をサポートする必要があります。
ドキュメントによると、urlとauthはどちらも requests.get() の名前付きパラメーターです。
しかし、これを実行すると ( url=''とauth = ''の追加に注意してください):
@asyncio.coroutine
def do_checks():
loop = asyncio.get_event_loop()
req = loop.run_in_executor(None, requests.get, url='https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
resp = yield from req
print(resp.status_code)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_checks())
次のエラーが表示されます。
TypeError: run_in_executor() got an unexpected keyword argument 'url'
asyncio.run_in_executor() のプロトタイプでは、追加の引数がサポートされています。
BaseEventLoop.run_in_executor(executor, callback, *args)
requests.get() は、名前付きパラメーター (get、auth など) を明確にサポートしています。どうしたの?