Why is my rust slower than Python!

Xu zhougeng 2021-10-28 17:26:09
rust slower python

stay my Rust The first lesson , I wrote a program, right fasta Medium ATCG Count . Back , I thought of a very common requirement , Read the file , The statistical number of rows , Be similar to wc -l

Here is the first version of the code I wrote , I named it myRead.rs

use std::io::BufReader;
use std::fs::File;
use std::env;
use std::io::BufRead;

fn main() -> std::io::Result<()> {

    let args: Vec<String> = env::args().collect();
    let filename = &args[1];

    let f = File::open(filename)?;
    let reader = BufReader::new(f);
    let mut line_num = 0;

    for _line in reader.lines() {
        line_num += 1

    }
    println!("{}", line_num);
    Ok(())
}

And then use rustc Compile

rustc myRead.rs

Then I use a record cdna Of fasta file ( about 300MB), To test , It takes about 5.6 second

time ./myRead Homo_sapiens.GRCh38.cdna.all.fa
# 5.50s user 0.13s system 99% cpu 5.647 total

Again , I have written 5 That's ok python Compare scripts

import sys
count = 0
for line in open(sys.argv[1]):
    count += 1
print(f"line number {count}")

python The code is less than 1 Seconds to complete the task

 time python ./read_file.py Homo_sapiens.GRCh38.cdna.all.fa
# 0.75s user 0.16s system 99% cpu 0.904 total

Seeing this result, I was directly shocked . Rust It runs faster than Python slow 6 About times . After intensive Retrieval , I finally found a reliable answer , BufReader 100x slower than Python — am I doing something wrong?

To sum up, the reason is

  1. The default optimization does not work , about rustc Need to set up -C opt-level=2 Or equivalent -O, about cargo It's settings --release
  2. .lines() Memory will be reallocated for each row , So it's not just dealing with UTF-8 The problem of .

According to the first suggestion , I'll use it again rustc Compiled the code , The speed directly exceeds Python

rustc -O ./myRead.rs
time ./myRead Homo_sapiens.GRCh38.cdna.all.fa
# 0.51s user 0.12s system 72% cpu 0.874 total

According to the second suggestion , Rewrite the following code

use std::fs::File;
use std::env;
use std::io::Read;

fn main() {
    let args: Vec<String> = env::args().collect();
    let filename = &args[1];
    let mut file = File::open(filename).unwrap();
    let mut lines = 0;
    let mut buf = [0u84096*32];
    while let Ok(num_bytes) = file.read(&mut buf) {
            if num_bytes == 0 { break; }
                lines += buf[..num_bytes].iter().filter(|&&byte| byte == b'\n').count();
    }
    println!("line number {}", lines);

}

Use rustc -O After compiling , The running speed has increased again 2 times .

actually , For me Rust beginner , Just remember Rust The program should be compiled Set optimization parameters , Further optimize the code , For a while and a half, I still can't understand .

版权声明
本文为[Xu zhougeng]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211013001123802A.html

  1. 有关python求众数,中位数和均值的题目
  2. 零基础5天入门Python数据分析:第四课
  3. 零基础5天入门Python数据分析:第三课(上)
  4. 零基础5天入门Python数据分析:第一课
  5. python redis自带门神 lock 方法
  6. 【算法学习】LCP 01. 猜数字(java / c / c++ / python / go)
  7. 【Python量化分析100例】Day2-星期几最容易被割韭菜
  8. python逆推年份,前两问写好了,第三问不会
  9. Python 爬取百度网页如何绕过安全验证
  10. 零基础5天入门Python数据分析:第五课
  11. Python人脸融合时出现关于pybind11的问题
  12. python如何返回除数,公约数,倍数
  13. python 返回多重嵌套列表(多于两层嵌套)的元素
  14. 用Python采集了几千条相亲文案,终于发现了告别单身的秘密
  15. python正负序列题,目前只学到循环,怎么做啊(*꒦ິ⌓꒦ີ)
  16. 拿爱奇艺练手Python爬虫,是在法律边缘试探吗?爬虫技巧学习
  17. Python注释删除代码依然报错
  18. python的pyautogui模块中的pyautogui.scroll()括号中无论写什么值滚动范围都相同
  19. 为什么python在vscode里运行报语法错误,在IDLE里就不会
  20. 请问python如何在将pdf转成word时,去除pdf上的页眉页脚(或者对于每页pdf只取第2行-倒数第二行)
  21. matlab改为python,偏最小二乘回归分析的一个程序
  22. 应该是python基础题希望能用基础方法解决
  23. 想找个会Python的做场外援助,上课没听明白
  24. Python程序,插入不了MySQL的date格式
  25. (初学者)关于Python操作Excel问题
  26. 求人来解答这两道Python题
  27. python中用三引号换行,举例说明
  28. python数码管该怎么用,十四段
  29. python进行中文文本聚类(切词以及Kmeans聚类)
  30. Python - 字符串作为文件
  31. Python - 转换二进制为ASCII码
  32. Python - 在段落中计算令牌
  33. Python - 重新格式化段落
  34. Python - 排序线
  35. Python - 字符串不变性
  36. Python - 文本摘要
  37. Python+微信小程序开发(六)双向绑定和前后端通信
  38. 基于Anaconda搭建Django环境
  39. Django基础篇(2)--视图
  40. 288页的python编程文档,从入门到实践,入门看这一篇就够了
  41. Python Web实战:Flask + Vue 开发一个漂亮的词云网站
  42. 让我深夜十二点催她睡觉,我用 Python 轻松搞定!
  43. 4.Python-常用语句
  44. 【Python】基于FastAPI的Restful规范实践
  45. 【Python】FastAPI脚手架:规范FastAPI后端接口项目开发
  46. 【Python】单元测试实践内部指南
  47. Django开发中使用Cache缓存提升10倍效率
  48. python如何重复执行程序命令而不是一次退出
  49. python 编写程序题使用for循环
  50. 一道简单的python作业题,就是不能运行
  51. 使用python回答,望有人来帮
  52. 用python插入日期格式到mysql数据库中,一直运行不了。
  53. 关于以下Python问题如何解决
  54. Use Python to help the financial sister solve the PDF splitting. The sister said it was great...
  55. Comment résoudre les problèmes Python suivants
  56. 如何使用python建立列表?新手入门
  57. python 3d画图库matplotlib,第一次用
  58. python 3d畫圖庫matplotlib,第一次用
  59. Python 3D painting Library matplotlib, utilisé pour la première fois
  60. Comment créer une liste en utilisant python? Débutant