亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 5218 | 回復(fù): 12
打印 上一主題 下一主題

一個(gè)小測(cè)試,不明白為啥python快這么多呢?求解釋 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-11-04 19:40 |只看該作者 |倒序?yàn)g覽
本帖最后由 PinkOrient 于 2012-11-04 20:41 編輯

說(shuō)下背景,本人是5+年的Perl老用戶,最近對(duì)Ruby比較長(zhǎng)草,順便也了解了一下Python.
最近遇到一個(gè)需求是分析大量實(shí)時(shí)生成的csv格式話單,對(duì)性能有一定對(duì)要求。這種情況下包含了大量的讀入字符串并根據(jù)分割符做split的操作,做個(gè)對(duì)比看看3種語(yǔ)言對(duì)處理速度如何。

步驟1:寫個(gè)perl腳本產(chǎn)生50000行每行150個(gè)field對(duì)csv文件 input_file.txt
  1. pink@pink-desktop:~/_perform$ perl gen_line.pl > input_file.txt
  2. pink@pink-desktop:~/_perform$ cat gen_line.pl
  3. #!/usr/bin/perl
  4. #
  5. $str="string";
  6. for($i=1;$i<150;$i++)
  7. {
  8.     $st=sprintf("string%d", $i);
  9.     $str=$str.",$st";
  10. }
  11. for($i=0;$i<50000;$i++)
  12. {
  13.     print "$str\n";
  14. }
復(fù)制代碼
步驟2:perl腳本上場(chǎng),逐行讀入,split成數(shù)組
  1. $ cat split.pl
  2. #!/usr/bin/perl

  3. open(FF,"input_file.txt");
  4. while(<FF>)
  5. {
  6.     @l=split/,/;
  7.     #print $l[2],"\n";
  8. }
  9. close(FF);
復(fù)制代碼
time一下看成績(jī):
  1. pink@pink-desktop:~/_perform$ time ./split.pl

  2. real        0m2.285s
  3. user        0m2.260s
  4. sys        0m0.024s
復(fù)制代碼
步驟3: ruby腳本上場(chǎng),做一樣的操作
  1. #!/usr/bin/ruby

  2. a=Array.new
  3. f=File.open("input_file.txt","r")
  4. f.each_line do |l|
  5.     a=l.split(/,/)
  6.     #puts a[2]
  7. end
  8. f.close()
復(fù)制代碼
成績(jī)不是很理想:
  1. pink@pink-desktop:~/_perform$ time ./split.rb

  2. real        0m3.426s
  3. user        0m3.408s
  4. sys        0m0.008s
復(fù)制代碼
步驟4:python腳本上場(chǎng),做一樣對(duì)操作
  1. pink@pink-desktop:~/_perform$ cat split.py
  2. #!/usr/bin/python

  3. fobj=open("input_file.txt","r")
  4. for eachLine in fobj:
  5.     l = eachLine.split(',')
  6.     #print l[2]
  7. fobj.close()
復(fù)制代碼
成績(jī)讓我很意外。!
  1. pink@pink-desktop:~/_perform$ time ./split.py

  2. real        0m0.480s
  3. user        0m0.444s
  4. sys        0m0.032s
復(fù)制代碼
步驟5: 用Ruby 1.9的CSV庫(kù),這個(gè)據(jù)說(shuō)已經(jīng)是FasterCSV了
  1. pink@pink-desktop:~/_perform$ cat split_csv.rb
  2. #!/usr/bin/ruby

  3. require "csv"

  4. CSV.foreach("input_file.txt") do |row|
  5.     #puts row[2]
  6. end
復(fù)制代碼
成績(jī)相當(dāng)對(duì)沒(méi)法看啊啊啊啊啊....
  1. pink@pink-desktop:~/_perform$ time ./split_csv.rb

  2. real        0m9.381s
  3. user        0m9.337s
  4. sys        0m0.024s
復(fù)制代碼
以Perl作為基準(zhǔn)來(lái)比較
Language real percent
Perl 2.285 100%
Ruby 3.426 149.9%
Ruby#CSV 9.381 410.5%
Python 0.480 21%


為什么Python會(huì)快這么多?求解釋

論壇徽章:
3
CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
2 [報(bào)告]
發(fā)表于 2012-11-04 20:00 |只看該作者
本帖最后由 mcshell 于 2012-11-04 20:01 編輯

我來(lái)解釋下。。不是split速度慢。。
我舉個(gè)別人測(cè)過(guò)的例子:

  1. 一個(gè)文件,每行都有18項(xiàng),各項(xiàng)之間用\t分割,使用時(shí)用到了第6項(xiàng)
  2. 1:my @array = split("\t",$_); my $var = $array[6];   測(cè)試文件平均用時(shí)8.2s
  3. 2. my($var) = (split("\t",$_))[6];  測(cè)試平均用時(shí)5.1s
  4. 3. my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_); 平均用時(shí)3.53s
  5. 4. my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_,7);平均用時(shí)3.52s
  6. 5. my $var = (split("\t",$_,7))[6]; 平均用時(shí)3.53s

復(fù)制代碼
而你用了效率最低的

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-11-04 20:21 |只看該作者
本帖最后由 PinkOrient 于 2012-11-04 20:26 編輯

回復(fù) 2# mcshell

從Perl內(nèi)部的縱向比較來(lái)看,我完全理解你的代碼所產(chǎn)生的效率差異的原因,我的代碼是全部field都保存到大數(shù)組導(dǎo)致的效率不高。
不過(guò)從橫向比較來(lái)說(shuō),這個(gè)操作其他幾個(gè)語(yǔ)言也一樣做了,我只是想不通Python用了什么辦法讓耗時(shí)變得這么突出的。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-11-04 20:24 |只看該作者
本帖最后由 PinkOrient 于 2012-11-04 20:33 編輯

回復(fù) 2# mcshell

根據(jù)你的方法優(yōu)化后的成績(jī),依然和python有較大對(duì)差異啊
  1. pink@pink-desktop:~/_perform$ time ./split.pl

  2. real        0m0.960s
  3. user        0m0.936s
  4. sys        0m0.020s
  5. pink@pink-desktop:~/_perform$ cat split.pl
  6. #!/usr/bin/perl

  7. open(FF,"input_file.txt");
  8. while(<FF>)
  9. {
  10.     $f2=(split/,/)[2];
  11.     #print "$f2\n";
  12. }
  13. close(FF);
復(fù)制代碼

論壇徽章:
7
戌狗
日期:2013-12-15 20:43:38技術(shù)圖書徽章
日期:2014-03-05 01:33:12技術(shù)圖書徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16賽季CBA聯(lián)賽之青島
日期:2016-03-17 20:36:13
5 [報(bào)告]
發(fā)表于 2012-11-04 20:25 |只看該作者
讓我很意外啊!

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2012-11-04 21:09 |只看該作者
樓主應(yīng)該試試csv的模塊和unpack再來(lái)比較,python是封裝過(guò)的 ,perl看你自己怎么寫了。。。。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2012-11-04 21:18 |只看該作者
回復(fù) 6# 斯文牛氓


我主要是想比較各個(gè)語(yǔ)言提供的標(biāo)準(zhǔn)庫(kù),要不直接都調(diào)C擴(kuò)展了。

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期:2018-03-27 11:59:132015年亞洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49雙魚座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亞冠之布里斯班獅吼
日期:2015-07-13 10:44:56
8 [報(bào)告]
發(fā)表于 2012-11-04 22:28 |只看該作者
python 那個(gè) split 不是正則表達(dá)式,要想同一起跑線請(qǐng)用 re.split

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2012-11-04 23:03 |只看該作者
樓上說(shuō)出了真相,python的這個(gè)split方法內(nèi)部根本不是正則表達(dá)式。

論壇徽章:
33
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-17 06:23:27操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-24 06:20:0015-16賽季CBA聯(lián)賽之天津
日期:2016-05-06 12:46:59
10 [報(bào)告]
發(fā)表于 2012-11-04 23:43 |只看該作者
關(guān)注一下.
一直以為應(yīng)該是 python慢.
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP