首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Coding
V2EX  ›  Python

Python 线程池数量问题,

  •  
  •   wuwukai007 · 29 天前 · 1183 次点击
    任务内都是 IO 密集型,每个任务耗时 5 到 6 秒,跑 20000 次,
    那么如何合理设置线程池的数量呢?有没有经验之谈或者公式。
    机器 >4 核 12 线程
    12 回复  |  直到 2019-11-12 13:44:59 +08:00
        1
    unixeno   29 天前 via Android
    io 密集型看你 io 啊
    而且 Python 有 gil,你多线程也只能利用一个核心
        2
    wuwukai007   29 天前
    @unixeno 任务内都是 查数据库,所以可以理解为走网络,开线程可以提高效率的
        3
    wuwukai007   29 天前
    我之前线程池开了 60+ ,后面发现数据库的连接数过多,后面改成 30 个,感觉效率反而也不差
        4
    Philippa   29 天前
    线程是可以共享内存的,建一个线程池分享给所有的线程使用,线程池数量当然最大值要大于线程数,配置自动回收线程,配置超时时间。其次,最终要多少线程还取决于你的数据库啦,因此单纯从这里信息是看不出最佳数量的。

    一般我都会实际测试一下,写个脚本,因为线程池改个数字就能看出来了。计算平均反应时间和中位数,哪里开始到达顶峰等等方式就可以直到大概最高点在哪里。如果性能还需要优化,这时就可以看看哪里是瓶颈,再进一步优化。线程数量可能不是需要优化的东西。举个例子,我之前用 64 个线程来请求 serverless 服务,因为 serverless 自动扩充,因此速度基本是 32 线程翻一翻的,因此我也可以知道线程池还没因为线程过多导致出问题的。
        5
    holajamc   29 天前
    试试用异步?
        6
    Leigg   29 天前 via Android
    很明显你的数据库连接数牵制了最大线程数,如果忽略前者影响,windows 上开几百个线程都是 ok 的。
        8
    wuwukai007   29 天前
    @Philippa 谢谢,我用的 oracle 数据库,最多只能支持 1000 连接 , 如果我线程池数量开的过多,会导致数据库连接过多,因为生产上还有别的项目再跑,我之前是直接开了多进程再加上线程池组合的方式,数据库连接也是用的连接池,但是还是会导致数据库连接过多,后面我发现线程池减小一点,效率也没降低,看来这是跟数据库有关了,我测试下
        9
    wuwukai007   29 天前
    @Leigg 谢谢,估计数据库问题
        10
    wangyzj   29 天前
    @wuwukai007 IO 密集型还是从 IO 上找把
    其他的影响不那么大
    查 oracle 不如看看索引
        11
    wysnylc   29 天前
    io 密集型把线程数设置为虚拟核心数量,fork/join 框架就是这么做的
        12
    676529483   29 天前
    io 密集型一个进程内,开 2*CPU 核数就差不多了。如果还觉得不够,就开多进程。
    再说你数据库要用连接池,去复用同一个连接啊
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   959 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    ♥ Do have faith in what you're doing.