2017-06-13 10 views
0

以下のコードでin range(1)in range(5)を変更すると、実行に約5倍の時間がかかります。私は並行性からより良い数値を得ることを望んでいました。このコードを間違って設定しましたか?あなたが探しているものネストされたasync/aiohttpコードを待つことはできますか?

import asyncio 
import aiohttp 

async def fetch(session): 
    async with session.get("http://www.example.com") as res: 
     await res.text() 

async def foo(session): 
    for i in range(10): 
     await fetch(session) 

async def main(loop): 
    async with aiohttp.ClientSession(loop = loop) as session: 
     for i in range(1): 
      await foo(session) 

loop = asyncio.get_event_loop() 
loop.run_until_complete(main(loop)) 
+0

のようなコードで終わるだろうたぶんあなたの代わりに一つのループのタスクのリストを作成してみてください?非同期は並行性ではありません – VMAtm

答えて

1

は、並行して複数のコルーチンを実行することができますasyncio.gatherです。

あなたは、次の

def main(): 
    # init session 
    coroutines = list() 
    for i in range(5): 
     coroutine = fetch(session) # XXX: mind the fact that there is await keyword here 
     coroutines.append(coroutine) 
    await asyncio.gather(*coroutines) 
関連する問題