python - 高并发下tornado中使用asyncio循环出现错误

标签 python tornado python-asyncio

我在tornado项目中安装了asyncio Ioloop,单个请求运行没有问题,但是当我做服务器压力测试时:

ab -n 10000 -c 4000  -p '/home/mwh/ad_tornado/for_test/task.json' -T 'application/x-www-form-urlencoded' '192.168.1.170/hwSdk/tsk/get_t_k.json'

发生错误:

[E 161216 10:32:22 base_events:1090] Exception in callback BaseAsyncIOLoop._handle_events(11, 1)
handle: <Handle BaseAsyncIOLoop._handle_events(11, 1)>
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/asyncio/events.py", line 125, in _run
  File "/home/mwh/virtualenv_mwh/lib/python3.4/site-packages/tornado/platform/asyncio.py", line 114, in _handle_events
  File "/home/mwh/virtualenv_mwh/lib/python3.4/site-packages/tornado/stack_context.py", line 275, in null_wrapper
  File "/home/mwh/virtualenv_mwh/lib/python3.4/site-packages/tornado/netutil.py", line 260, in accept_handler
  File "/usr/local/lib/python3.4/socket.py", line 187, in accept
OSError: [Errno 24] Too many open files

在tornado中使用asynico ioloop会降低性能吗?

最佳答案

您正在尝试运行 4000 并行请求,这意味着 4000 同时打开套接字。

但通常系统限制默认只允许打开 1024 个文件(尝试 ulimit -a)。

您可以通过 ulimit -n 4096 调用来覆盖限制。

关于python - 高并发下tornado中使用asyncio循环出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41176698/

相关文章:

python-3.x - 为什么我收到 ValueError : too many file descriptors in select()?

Python asyncio - 为什么需要 3 个等待才能完成任务?

python - 子进程输出中未正确显示 Unicode 字符

Python 请求返回 200 而不是 301

python - scipy.io.savemat 如何保存全局变量?

python - 如何在我的 Pig Latin Translator (Python) 上添加退出选项

python - Tornado Web 框架 Mysql 连接处理

python - Tornado 安全 websocket 超时

python - 如何以安全的方式从异步函数调用同步函数

python - Tornado 没有重定向到新的虚拟页面