2017-04-23 9 views
1

주어진 첫 번째 요청이 반환되지 않을 때까지 서버가 모든 요청을 수락하지 않는 것이 문제입니다.파이썬 3.6. I/O를 차단합니다. 서버가 첫 번째 요청 요청을 처리하는 동안 어떤 요청도 수락하지 않습니다.

import asyncio 
import datetime as dt 
from aiohttp import web 


async def search(request): 
    print('!START! %s' % dt.datetime.now()) 

    await asyncio.sleep(5) 

    print('!--END! %s' % dt.datetime.now()) 
    return web.json_response(data={}) 


app = web.Application() 
app.router.add_get('/search/', search) 

web.run_app(app) 


#run_server 
#python -m aiohttp.web -H localhost -P 8080 handler:init_func 

예 : 나는 거의 같은 시간에 두 개의 탭에 http://localhost:8080/search/ 실행했습니다. 그러나 요청이 순차적으로 처리되는 것을 보았습니다.

!START! 2017-04-24 12:05:37.978347 
!--END! 2017-04-24 12:05:47.980859 
!START! 2017-04-24 12:05:48.037671 
!--END! 2017-04-24 12:05:58.040659 

하지만 요청이 병렬 처리 될 것으로 예상됩니다.

!START! 2017-04-24 12:05:37.978347 
!START! 2017-04-24 12:05:38.000000 
!--END! 2017-04-24 12:05:47.980859 
!--END! 2017-04-24 12:05:48.000000 

무엇이 잘못 되었습니까?

+0

어떻게'search (request)'함수를 호출하고 있습니까? [최소, 완전하고 검증 가능한 예] (https://stackoverflow.com/help/mcve)를 제공해주십시오. 뷰에서 @hiroprotagonist '에 대한 –

+0

가져 검색 응용 프로그램 = web.Application() app.router.add_get ('/ 검색 /'검색) routes.setup (응용 프로그램)' – Roman

+0

당신이 당신의에 대한 자세한 내용을 설명 할 수 문제? "주어진 첫 번째 요청이 반환되지 않을 때까지"는 무엇을 의미합니까? –

답변

1

대부분의 브라우저는 내부적으로 연결 풀을 사용하며 동일한 호스트에 대한 새 연결을 만들지 않습니다. 따라서 두 페이지는 동일한 열린 소켓을 공유합니다.