6

aiohttpURLをリクエストするために使用します。ほとんどの場合、正常に実行されますが、例外が発生せずに停止することがあります。

コードでわかるように、すべての例外をキャッチしますが、停止すると例外のログは出力されません。

ログは次のようになります。

get_live_league_games: while True
try
yield from aiohttp.request

しかし、「res = yield from r.json()」は印刷されず、停止し、例外はスローされません。

while True:
    print('get_live_league_games: while True')
    start = time.clock()
    try:
        print('try')
        r = yield from aiohttp.request('GET',url)
        print('yield from aiohttp.request')
        res = yield from r.json()
        print('res = yield from r.json()')
    except aiohttp.errors.DisconnectedError as e:
        logging.warning('get_live_league_games:',e)
        yield from asyncio.sleep(10)
        continue
    except aiohttp.errors.ClientError as e:
        logging.warning('get_live_league_games:',e)
        yield from asyncio.sleep(10)
        continue
    except aiohttp.errors.HttpProcessingError as e:
         logging.warning('get_live_league_games:',e)
         yield from asyncio.sleep(10)
         continue
    except Exception as e:
         logging.warning('get_live_league_games,Exception:',e)
         yield from asyncio.sleep(10)
         continue
    print('request internet time : ', time.clock()-start)
    yield from asyncio.sleep(10)
4

1 に答える 1

5

これ、インターネットの性質により発生する可能性があります。切断エラーが発生する前に、接続が非常に長い間「ハング」することがあります。

そのため、通常、クライアントの http 操作にはタイムアウトが必要です。

aiohttp.request()呼び出しを にラップすることをお勧めしasyncio.wait_forます。

于 2015-08-13T02:53:14.433 に答える