기다리고 :이 하나 기다릴 필요없이 동시에 여러 들어오는 요청을 처리 할 수있을 것으로 기대된다파이썬 3.5 aiohttp 블록도/나는 시험 aiohttp 웹 서버를 실행하는거야
#!/usr/bin/env python3
from aiohttp import web
import time
import asyncio
import random
import string
import logging
logger = logging.getLogger('webserver')
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
def randomword(length):
return ''.join(random.choice(string.ascii_lowercase) for i in range(length))
async def hello(request):
sleeptime = 10 # seconds
requestid = randomword(5)
logger.info("Request id: {} received - will sleep for {}".format(requestid, sleeptime))
await asyncio.sleep(sleeptime)
logger.info("Request id: {} wakeup and respond".format(requestid))
return web.json_response()
# create app and register with request handler
app = web.Application()
app.router.add_get('/', hello)
web.run_app(app, port='15000')
다음 것을 처리하기 전에 완료를 요청하십시오. 그러나, 그렇게하지 않습니다 - 처리가 순차적 (2의 시작 시간을 참고/3 요청은 이전 요청이 완료된 후입니다) :
======== Running on http://0.0.0.0:15000/ ========
(Press CTRL+C to quit)
2016-10-23 02:28:23,911 - webserver - INFO - Request id: hpzdo received - will sleep for 10
2016-10-23 02:28:33,922 - webserver - INFO - Request id: hpzdo wakeup and respond
2016-10-23 02:28:33,947 - webserver - INFO - Request id: pdfbs received - will sleep for 10
2016-10-23 02:28:43,957 - webserver - INFO - Request id: pdfbs wakeup and respond
2016-10-23 02:28:43,971 - webserver - INFO - Request id: dmkav received - will sleep for 10
2016-10-23 02:28:53,982 - webserver - INFO - Request id: dmkav wakeup and respond
나는 (각 요청의 시작 시간은 거의 동일 기대 내가 그들을 제출하는 방법에 따라, 여기에서 나는 수동으로 1 ~ 2 초 내에 제출할 것입니다.)
는 어떻게 요청하고 있습니다를? 모든 클라이언트가 동일한 URL에 동시에 요청할 수있는 것은 아닙니다. – dirn
Firefox에서 세 개의 탭을 나란히 열고 요청을 빠르게 만들고 페이지를 새로 고칩니다 (URL은 http : // localhost : 15000 모두 3 개). –
파이어 폭스는 동일한 URL에 동시 요청을하지 않는 클라이언트 중 하나라고 생각합니다. @Andrew Svetlov의 대답과 같이 테스트에 더 적합한 도구를 사용하면 원하는 동작을 나타내야합니다. – dirn