13

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 (説明はこちら) をサポートする必要があります。

ドキュメントによると、urlauthはどちらも 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 など) を明確にサポートしています。どうしたの?

4

2 に答える 2