优化 python 程序? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
billgreen1
V2EX    Python

优化 python 程序?

  •  
  •   billgreen1 2015-12-29 07:07:09 +08:00 4266 次点击
    这是一个创建于 3579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个函数,要使用不同的数据(data1, data2, .....data10000,...),不涉及锁。

    单个函数, func(data1),耗时不大,也就几十到 100 毫秒左右,但是要运行的次数很多。
    这样的程序应该怎样优化?

    我试过 multiprocessing ,但是效果不大,感觉 multiprocess 对那种单个耗时很大的程序帮助比较大。
    21 条回复    2015-12-29 22:33:26 +08:00
    binux
        1
    binux  
       2015-12-29 07:14:23 +08:00
    用 multiprocessing 之后 CPU 占满了吗?占满了就没得提升了,如果没有,要么你的程序不是 CPU 密集型,继续加大线程 /进程数,要么你用得不对。
    billgreen1
        2
    billgreen1  
    OP
       2015-12-29 07:24:52 +08:00
    @binux 占满了, 55555~~~
    clino
        3
    clino  
       2015-12-29 07:33:27 +08:00 via Android
    cython 之类的?
    helloworld00
        4
    helloworld00  
       2015-12-29 07:36:33 +08:00
    先 profile 看到底哪最耗时,从你这么几句看不到代码很难说出什么方法

    想办法有目的性的去优化代码, 数据结构,代码逻辑等

    最后用 pypy
    ericls
        5
    ericls  
       2015-12-29 08:08:39 +08:00 via iPhone
    CPU 密集用 pypy cython 多线程
    IO 密集 用 异步

    看看 GIL 也许有帮助
    ljdawn
        6
    ljdawn  
       2015-12-29 08:34:28 +08:00
    如果是 cpu 密集型的就没法子了...
    DuckJK
        7
    DuckJK  
       2015-12-29 08:40:02 +08:00
    h4x3rotab
        8
    h4x3rotab  
       2015-12-29 09:29:07 +08:00 via iPhone
    mapreduce
    bookocean
        9
    bookocean  
       2015-12-29 09:32:04 +08:00
    都不清楚你这个函数是干嘛的,怎么给意见呢
    9hills
        10
    9hills  
       2015-12-29 09:46:51 +08:00
    分析性能瓶颈,尝试优化,实在不行就用 C 重写相关部分

    其实暴力的办法就是上多机并行处理
    Feiox
        11
    Feiox  
       2015-12-29 10:12:55 +08:00
    其实。。。一个函数几十上百毫秒,已经算耗时大的了。。。。
    est
        12
    est  
       2015-12-29 10:16:19 +08:00
    Aalen
        13
    Aalen  
       2015-12-29 10:34:26 +08:00
    hadoop 啦~
    zhicheng
        14
    zhicheng  
       2015-12-29 10:38:11 +08:00 via Android
    Numpy
    ProfFan
        15
    ProfFan  
       2015-12-29 11:31:45 +08:00
    @est 非常感谢收藏了~
    pynix
        16
    pynix  
       2015-12-29 11:37:19 +08:00
    这耗时已经很长了好吧。。。。。
    ryd994
        17
    ryd994  
       2015-12-29 11:59:03 +08:00 via Android
    不要把函数直接挂给 multiprocessing
    fork 的开销也不小的
    正确的是写一个 wrapper ,让一个进程处理几十个
    m8syYID5eaas8hF7
        18
    m8syYID5eaas8hF7  
       2015-12-29 13:43:53 +08:00
    用 C++写一下那个函数试试看(来自 python 初学者的建议)
    ethego
        19
    ethego  
       2015-12-29 14:17:28 +08:00
    为什么要开进程?这明显只要开线程就够了
    glogo
        20
    glogo  
       2015-12-29 19:50:58 +08:00
    multiprocessing + 协成,我是这样的, IO 密集型,性能是 multiprocessing + 线程的 5 倍
    asxalex
        21
    asxalex  
       2015-12-29 22:33:26 +08:00
    尝试优化函数内部算法,数据结构吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5349 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 01:18 PVG 09:18 LAX 18:18 JFK 21:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86