由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - python太慢了
相关主题
Python 的性能太差(?) (转载)is smart_ptr really that good?
后台python wsgi, 前端html, css, javascriptC++多线程和硬件的关系
什么OPEN SOURCE的CODE对初级用户比较有用谁知道facebook chat这类的东东是怎么做的
感觉go最无聊的就是现在主流web server是什么?
从王垠的代码看似乎其没在正规公司呆过一个django问题:debug=true就很好;debug=false,css就找不到
根据调研以及好虫建议Re: 大家介绍一下当下比较流行的网页编程吧 (转载)
node.js快,到底什么是根本的原因?goodbug 老师,如果用ROR 加上您的架构,能做出撑的住火车订票系统么?
玩go还是要玩OO谁给菜鸟科普一下?client side MVC
相关话题的讨论汇总
话题: python话题: jython话题: jni话题: 效率话题: 计算
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
搞得我整天都在等结果上bbs. 本来应该是C++写的核心计算程序是瓶颈, 结果外围的
python程序比核心程序还慢. 真是郁闷死我了. 貌似还不能parallelize, 怎么会有这
种弱智的解释器!
c****e
发帖数: 1453
2
haha.坐等有人让你起多进程。
w***g
发帖数: 5958
3
可怜我花了大量时间想核心算法的scalability, 结果死在了python的interpreter
lock上.

【在 c****e 的大作中提到】
: haha.坐等有人让你起多进程。
s***o
发帖数: 2191
4
早就说过了,PHP才是世界上最好的语言,赶紧换吧

【在 w***g 的大作中提到】
: 搞得我整天都在等结果上bbs. 本来应该是C++写的核心计算程序是瓶颈, 结果外围的
: python程序比核心程序还慢. 真是郁闷死我了. 貌似还不能parallelize, 怎么会有这
: 种弱智的解释器!

t****a
发帖数: 1212
5
你不是玩haskell的嘛,好好的haskell并行不用怎么跑回python来了,是不是图上面的
package多,呵呵。

【在 w***g 的大作中提到】
: 可怜我花了大量时间想核心算法的scalability, 结果死在了python的interpreter
: lock上.

w**z
发帖数: 8232
6
multi processor?

【在 w***g 的大作中提到】
: 可怜我花了大量时间想核心算法的scalability, 结果死在了python的interpreter
: lock上.

s********k
发帖数: 6180
7
多线程和CPU intensive的工作就不适合python,换event based或者核心代码用C写,
python调用库就是了

【在 w***g 的大作中提到】
: 可怜我花了大量时间想核心算法的scalability, 结果死在了python的interpreter
: lock上.

z*******3
发帖数: 13709
8
楼主,给你一个小建议
有个东西叫jyphon
p**o
发帖数: 3409
9

对自己不熟悉的东西不要乱给“建议”
楼主的计算内核是用C/C++写的
jython调用不了C扩展

【在 z*******3 的大作中提到】
: 楼主,给你一个小建议
: 有个东西叫jyphon

z*******3
发帖数: 13709
10
对自己不熟悉的东西不要乱给“建议”
有个东西叫做jni

【在 p**o 的大作中提到】
:
: 对自己不熟悉的东西不要乱给“建议”
: 楼主的计算内核是用C/C++写的
: jython调用不了C扩展

相关主题
根据调研以及好虫建议is smart_ptr really that good?
node.js快,到底什么是根本的原因?C++多线程和硬件的关系
玩go还是要玩OO谁知道facebook chat这类的东东是怎么做的
进入Programming版参与讨论
w****k
发帖数: 6244
11
cpython 直接调用c不就可以,干嘛绕那么大弯用jython和jni

【在 z*******3 的大作中提到】
: 对自己不熟悉的东西不要乱给“建议”
: 有个东西叫做jni

d***q
发帖数: 1119
12

jython现在还无法和python比较性能, 我有个协议的解析程序。jython 只有大约 1/3
-1/2的性能。如果jython下一个版本能有效利用 jvm的dynamic invoke指令,那么说不
定会
有所提高。
jython用jni来调用c就太迂回了,先不说jni大多数时候效率并不高,而且如果要用c,
干吗要用jython? 如果是cpu-intensive,这里面也要看是什么类型的计算,有部分可
以用java写,性能也不差。

【在 p**o 的大作中提到】
:
: 对自己不熟悉的东西不要乱给“建议”
: 楼主的计算内核是用C/C++写的
: jython调用不了C扩展

y****e
发帖数: 23939
13
profile一下,看看是哪部分慢。能把源代码贴出来吗?不会是人笨怪刀钝吧?

【在 w***g 的大作中提到】
: 搞得我整天都在等结果上bbs. 本来应该是C++写的核心计算程序是瓶颈, 结果外围的
: python程序比核心程序还慢. 真是郁闷死我了. 貌似还不能parallelize, 怎么会有这
: 种弱智的解释器!

z*******3
发帖数: 13709
14
都不看原帖?
楼主在抱怨cpython慢啊

【在 w****k 的大作中提到】
: cpython 直接调用c不就可以,干嘛绕那么大弯用jython和jni
c****e
发帖数: 1453
15
有个global lock,没办法。

【在 y****e 的大作中提到】
: profile一下,看看是哪部分慢。能把源代码贴出来吗?不会是人笨怪刀钝吧?
z*******3
发帖数: 13709
16
宾狗
对于楼主来说,最简单的就是抛弃python上jvm
但是问题在于,这样做就丢掉了原来的代码
上jyphon可以最大程度复用代码
另外就是,jni只是一个小接口,这个有什么效率不效率的
一步的效率再慢能慢到哪里去,后面执行都是c的效率
前台执行完全是jvm的效率,这两个效率都明显有保证
有的是办法做优化,jvm的优化是几十年的积累
估计楼主用的就是web,上tomcat
效率明显高过各种乱七八糟的web server
这个效率也是n个人说过的例子了

/3

【在 d***q 的大作中提到】
:
: jython现在还无法和python比较性能, 我有个协议的解析程序。jython 只有大约 1/3
: -1/2的性能。如果jython下一个版本能有效利用 jvm的dynamic invoke指令,那么说不
: 定会
: 有所提高。
: jython用jni来调用c就太迂回了,先不说jni大多数时候效率并不高,而且如果要用c,
: 干吗要用jython? 如果是cpu-intensive,这里面也要看是什么类型的计算,有部分可
: 以用java写,性能也不差。

h**********0
发帖数: 88
17
为什么不试试pypy?
完全提高了N个档次。。。。(官方是说跟C差不多)
d***q
发帖数: 1119
18

pypy 可以有效消除 function call的开销,不过对于数值计算,效果不如用cython。
而且现在pypy的坑也比较多,就算是2.0也是如此。

【在 h**********0 的大作中提到】
: 为什么不试试pypy?
: 完全提高了N个档次。。。。(官方是说跟C差不多)

d***q
发帖数: 1119
19
这个效率问题还是要看具体的例子。
如果仅仅是单纯 计算一下 然后返回。那么使用jni也没啥问题。但是如果有些场景需
要做大量的交互, 不停在边界上进出,这时jvm没法很好优化, 效率反而还不如直接
用java。
我几年前搞过一些gis的东西。之前有一套系统的计算用c++写,然后用jni来调用,问
题特别多。最后全部用java写,现在用了几年也没啥问题,之前还担心性能会降低,后
来发现还好了,没有想象中的慢。
现在对于这种场景,我的做法是把这些 要计算的封装一下,做个服务,用个rpc之类的
call一下就好。不通过jni来调用。容易调试,反正计算部分的耗时要远大于call的开
销。用rpc也无所谓。
如果是一些cpu intensive & io intensive都有的,这时候直接用java来写90%也能
满足,如果还不能满足,就只有上c++了,整个都替换,不过这种极端的情况甚为少见。

【在 z*******3 的大作中提到】
: 宾狗
: 对于楼主来说,最简单的就是抛弃python上jvm
: 但是问题在于,这样做就丢掉了原来的代码
: 上jyphon可以最大程度复用代码
: 另外就是,jni只是一个小接口,这个有什么效率不效率的
: 一步的效率再慢能慢到哪里去,后面执行都是c的效率
: 前台执行完全是jvm的效率,这两个效率都明显有保证
: 有的是办法做优化,jvm的优化是几十年的积累
: 估计楼主用的就是web,上tomcat
: 效率明显高过各种乱七八糟的web server

d***q
发帖数: 1119
20
python (估计,ruby, 或者其他动态语言也可能适用)
的 function call是个很重型的动作,vm又比较差劲,没法很好地Inline 来避免开销,
+ 类型的检查,导致如果发生大量函数调用时就会很慢。于是不少人搞出了一些
例如 cython,swig之类的东西,本质就是要绕过pvm, 降低函数调用的损失,来达到加
速的效果。
GIL 这个可以用多进程来部分解决这个问题,也有不少应用的例子,例如web的
前端用nginx, 后端起若干个进程,或者用zeromq之类来进行进程间的通信,都有真实
的例子,所以gil 现在反而不是太敏感。

【在 c****e 的大作中提到】
: 有个global lock,没办法。
相关主题
现在主流web server是什么?goodbug 老师,如果用ROR 加上您的架构,能做出撑的住火车订票系统么?
一个django问题:debug=true就很好;debug=false,css就找不到谁给菜鸟科普一下?client side MVC
Re: 大家介绍一下当下比较流行的网页编程吧 (转载)最近GO好像很hype
进入Programming版参与讨论
w****k
发帖数: 6244
21
所以你建议换更慢的jython?

【在 z*******3 的大作中提到】
: 都不看原帖?
: 楼主在抱怨cpython慢啊

z*******3
发帖数: 13709
22
我对jvm的效率更有信心
优化起来办法也多

【在 w****k 的大作中提到】
: 所以你建议换更慢的jython?
z*******3
发帖数: 13709
23
宾狗
我也觉得楼主当初坚决上jvm
不听别人乱忽悠的话,可能现在就开始爽了
而不用像现在这样,不仅解决方法没几个
处处受限,还要被嘲笑人笨怪刀钝
出来混,总要还的
当初投机取巧,现在还回去
另外,如果计算的公式很复杂的话
用scala可能会更好,会直观一点
oop尤其是java数学公式的书写不直观是软肋
如果是简单的数学,用apache common math包就好了

【在 d***q 的大作中提到】
: 这个效率问题还是要看具体的例子。
: 如果仅仅是单纯 计算一下 然后返回。那么使用jni也没啥问题。但是如果有些场景需
: 要做大量的交互, 不停在边界上进出,这时jvm没法很好优化, 效率反而还不如直接
: 用java。
: 我几年前搞过一些gis的东西。之前有一套系统的计算用c++写,然后用jni来调用,问
: 题特别多。最后全部用java写,现在用了几年也没啥问题,之前还担心性能会降低,后
: 来发现还好了,没有想象中的慢。
: 现在对于这种场景,我的做法是把这些 要计算的封装一下,做个服务,用个rpc之类的
: call一下就好。不通过jni来调用。容易调试,反正计算部分的耗时要远大于call的开
: 销。用rpc也无所谓。

w*s
发帖数: 7227
24
can you precompile phthon script into exe ?

【在 w***g 的大作中提到】
: 搞得我整天都在等结果上bbs. 本来应该是C++写的核心计算程序是瓶颈, 结果外围的
: python程序比核心程序还慢. 真是郁闷死我了. 貌似还不能parallelize, 怎么会有这
: 种弱智的解释器!

n******t
发帖数: 4406
25
crazy.......
坑爹的建议可能也就这个level了吧。

【在 z*******3 的大作中提到】
: 楼主,给你一个小建议
: 有个东西叫jyphon

z*******3
发帖数: 13709
26
well
既然坑已经挖出来了
要么越挖越深,比如jyphon
或者坐以待毙,逆来顺受,比如继续用下去
要么干脆跳出来,重新挖,比如代码全部重写换java
实话实说,现实生活中,大多数老板会选择前两个
而对于有经验的人来说,会很清楚滴知道,最后一个其实是最好的选择
要不你给说说怎么办?

【在 n******t 的大作中提到】
: crazy.......
: 坑爹的建议可能也就这个level了吧。

w*x
发帖数: 518
27
小白弱问 为啥不用Cython?

【在 z*******3 的大作中提到】
: 宾狗
: 我也觉得楼主当初坚决上jvm
: 不听别人乱忽悠的话,可能现在就开始爽了
: 而不用像现在这样,不仅解决方法没几个
: 处处受限,还要被嘲笑人笨怪刀钝
: 出来混,总要还的
: 当初投机取巧,现在还回去
: 另外,如果计算的公式很复杂的话
: 用scala可能会更好,会直观一点
: oop尤其是java数学公式的书写不直观是软肋

g********n
发帖数: 296
28
If you are using Linux, in your C code, use set_affinity system call to
overwrite Python's scheduler. It might work.
Assume you have 8 cores, leave the first for Python and OS, use the reset 7
cored for your C task.
1 (共1页)
进入Programming版参与讨论
相关主题
谁给菜鸟科普一下?client side MVC从王垠的代码看似乎其没在正规公司呆过
最近GO好像很hype根据调研以及好虫建议
什么叫全栈工程师node.js快,到底什么是根本的原因?
工作之余想捣鼓点东西玩go还是要玩OO
Python 的性能太差(?) (转载)is smart_ptr really that good?
后台python wsgi, 前端html, css, javascriptC++多线程和硬件的关系
什么OPEN SOURCE的CODE对初级用户比较有用谁知道facebook chat这类的东东是怎么做的
感觉go最无聊的就是现在主流web server是什么?
相关话题的讨论汇总
话题: python话题: jython话题: jni话题: 效率话题: 计算