2017-08-20 8 views
0

以下は、インタラクティブブローカーのウェブサイトからのリンクを削る1つのコードです。Python Aiohttp:セッションオブジェクトのユーティリティについて

aiohttpのdocumentationでは、「セッション」がある要求から別の要求に再利用されるように、常にaiohttp.ClientSession()オブジェクトを使用すると言われています。しかし、複数のリクエストの例(here for instance)から見ることができるのは、リクエストごとに1つのセッションが作成されるということです...?セッションオブジェクトの興味は?

import asyncio 
from aiohttp import ClientSession 

exchanges_by_locs=[] 
inst_type_dicts=[] 
async def inst_types(url): 
    async with ClientSession() as session: 
     async with session.get(url) as response: 
      response = await response.text() 
      html = lxml.html.fromstring(response) 
      p=html.xpath('//*[@id="toptabs"]/ul/li') 
      for e in p: 
       inst=dict(inst_type=e.find('a/span').text, 
          url='https://www.interactivebrokers.com'+e.find('a').attrib['href']) 
       inst_type_dicts.append(inst) 

async def inst_by_loc(inst): 
    url=inst['url'] 
    print("start: ",inst['inst_type']) 
    async with ClientSession() as session: 
     async with session.get(url) as response: 
      doc = requests.get(url).content 
      html = lxml.html.fromstring(doc) 
      p=html.xpath('//*[@class="subtabsmenu"]/li')  
      for e in p: 
       exchanges_by_loc=dict(loc=e.find('a/span').text, 
          loc_url='https://www.interactivebrokers.com'+e.find('a').attrib['href']) 
       exchanges_by_locs.append(exchanges_by_loc) 
      print("complete: ",inst['inst_type']) 

loop = asyncio.get_event_loop() 
loop.run_until_complete(inst_types(url)) 
loop.run_until_complete(
    asyncio.gather(
     *(inst_by_loc(inst) for inst in inst_type_dicts) 
    ) 
) 

答えて

1

可能であれば、セッションオブジェクトを再利用することをお勧めします。それは小さなパフォーマンスのトリックです。

関連する問題