を用いた場合であっても、私は、テストaiohttpウェブサーバを実行している:のPython 3.5 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')
これは、同時に複数の着信要求を処理できるように期待されている1を待つことなく、次のものを処理する前に完了を要求する。しかし、それはそうされていません - 処理がシーケンシャルである(第二の開始時間に注意してください/第三の要求は、前の要求が完了した後で):
======== 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で3つのタブを並べて表示し、それらをすばやく循環させ、ページを更新することでリクエストを作成しています(URLはhttp:// localhost:15000です)。 –
私は、Firefoxが同じURLに同時リクエストをしないクライアントだと信じています。 @Andrew Svetlovの回答のように、テストに適したツールを使用すると、あなたの希望する動作が表示されます。 – dirn