【问题标题】:Python 3.6. blocking I/O. Server doesn't accept any request while first request in process蟒蛇 3.6。阻塞 I/O。服务器在处理第一个请求时不接受任何请求
【发布时间】:2017-04-23 10:36:24
【问题描述】:

问题是服务器不接受任何请求,直到给出的第一个请求没有返回。

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

我做错了什么?

【问题讨论】:

  • 如何调用search(request) 函数?请提供minimal, complete and verifiable example
  • for @hiroprotagonist from views import search app = web.Application() app.router.add_get('/search/', search) routes.setup(app)
  • 你能解释一下你的问题吗? “直到第一个请求没有返回”是什么意思?
  • 无法复制。您的示例按预期工作(运行curl http://localhost:8080/search/ & 的几个时间)。
  • 真的,它与 curl 并行工作。谢谢!但我已经在 FireFox 中运行过,而且我已经按顺序运行了。为什么浏览器按顺序工作? @kwarunek

标签: async-await python-3.5 python-asyncio aiohttp


【解决方案1】:

大多数浏览器在内部使用连接池,并且不会创建到同一主机的新连接。因此,两个页面共享同一个打开的套接字。

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 2022-11-10
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2021-04-29
    相关资源
    最近更新 更多