From 66ea8dbd2a5fe3e5f3dcfa537ccd7f9179ed7ae8 Mon Sep 17 00:00:00 2001 From: Yichen Yan Date: Tue, 13 Dec 2022 10:32:31 +0800 Subject: [PATCH] add pycds --- .../finish.md" | 1 + .../index.yaml" | 14 ++++++ .../start.md" | 15 ++++++ .../step2.md" | 47 +++++++++++++++++++ .../step3.md" | 31 ++++++++++++ anolis-courses/pycds/index.yaml | 10 ++++ 6 files changed, 118 insertions(+) create mode 100644 "anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/finish.md" create mode 100644 "anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/index.yaml" create mode 100644 "anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/start.md" create mode 100644 "anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step2.md" create mode 100644 "anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step3.md" create mode 100644 anolis-courses/pycds/index.yaml diff --git "a/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/finish.md" "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/finish.md" new file mode 100644 index 0000000..1597daf --- /dev/null +++ "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/finish.md" @@ -0,0 +1 @@ +您也可以在环境中尝试使用其他包,并结合PyCDS进行加速实验。 \ No newline at end of file diff --git "a/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/index.yaml" "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/index.yaml" new file mode 100644 index 0000000..291e335 --- /dev/null +++ "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/index.yaml" @@ -0,0 +1,14 @@ +name: PyCDS 使用指南 +desc: 本课程将针对 Python 程序启动时间进行分析,并说明 PyCDS 能够在哪些方面加速 Python 程序的启动 +image: Anolis OS 8.6 ANCK 64位 +live_time: 20min +machine: x86_64-2c4g +max_clients: 0 +details: + steps: + start: start.md + - name: Python 启动速度探索 + content: step2.md + - name: PyCDS 使用介绍 + content: step3.md + finish: finish.md diff --git "a/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/start.md" "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/start.md" new file mode 100644 index 0000000..ec54b58 --- /dev/null +++ "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/start.md" @@ -0,0 +1,15 @@ +安装 conda + +[[ +curl -L -O "https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-22.9.0-2-$(uname)-$(uname -m).sh" && +bash "Miniforge3-22.9.0-2-$(uname)-$(uname -m).sh" -b +]] + +配置软件源 +[[conda config --set custom_channels.conda-forge 'https://mirrors.bfsu.edu.cn/anaconda/cloud']] + +创建环境 +[[ +conda create -y -n 310_env python=3.10 && +conda create -y -n 311_env python=3.11 +]] diff --git "a/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step2.md" "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step2.md" new file mode 100644 index 0000000..86abd91 --- /dev/null +++ "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step2.md" @@ -0,0 +1,47 @@ +首先从 Python 3.11 vs 3.10 的优化开始: + +3.11 +[[ +conda activate 311_env && +time python -c 'pass' +]] + +3.10 +[[ +conda activate 311_env && +time python -c 'pass' +]] + +可以看到在空语句的情况下,解释器本身的启动速度有了提升。 +接下来,使用 `-X importtime` 对 python 启动过程中的import时间进行分析。 + +3.11 +[[ +conda activate 311_env && +time python -X importtime -c 'pass' +]] + +3.10 +[[ +conda activate 310_env && +time python -X importtime -c 'pass' +]] + +可以看到,不引入第三方库的情况下,python 解释器启动过程中也需要加载很多库,也可以发现3.11中加载时间得到了很大提升。 + +对于在代码中手动引入库的情况呢?这里选择了一个较小的内置库collections: + +3.11 +[[ +conda activate 311_env && +time python -X importtime -c 'import collections' +]] + +3.10 +[[ +conda activate 310_env && +time python -X importtime -c 'import collections' +]] + +可以看到虽然前面的加载时间减小了,但是collections本身的耗时反而有所增加,说明3.11中的优化并未在这个包上生效。 +接下来,我们将使用PyCDS并探索其效果。 \ No newline at end of file diff --git "a/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step3.md" "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step3.md" new file mode 100644 index 0000000..083a075 --- /dev/null +++ "b/anolis-courses/pycds/PyCDS\344\275\277\347\224\250\346\214\207\345\215\227/step3.md" @@ -0,0 +1,31 @@ +以python 3.11为例: +[[conda activate 311_env]] + +首先安装code-data-share包: + +[[pip install code-data-share]] + +以collections包为例,我们只需要加速这一个包的加载,使用方法如下: + +[[ +echo 'collections' > test.lst && +python -c 'import cds.dump; cds.dump.run_dump("test.lst", "test.img")' && +PYCDSMODE=SHARE PYCDSARCHIVE=test.img python -X importtime -c 'import collections' +]] + +如果配置正确,此处可以看到collections包的加载时间比之前大幅降低了。 + +上面我们手动指定生成了collections的加速文件。如果对于较复杂的环境,如何生成所需的文件呢?以numpy为例 + +安装numpy: +[[pip install numpy]] + +生成加载列表、生成加速文件 +[[ +PYCDSMODE=TRACE PYCDSLIST=numpy.lst python3 -c 'import numpy' && +python -c 'import cds.dump; cds.dump.run_dump("numpy.lst", "numpy.img")' +]] + +验证效果 +[[python -X importtime -c 'import numpy' 2>&1 | tail -n 1]] +[[PYCDSMODE=SHARE PYCDSARCHIVE=numpy.img python -X importtime -c 'import numpy' 2>&1 | tail -n 1]] \ No newline at end of file diff --git a/anolis-courses/pycds/index.yaml b/anolis-courses/pycds/index.yaml new file mode 100644 index 0000000..fcf0273 --- /dev/null +++ b/anolis-courses/pycds/index.yaml @@ -0,0 +1,10 @@ +name: PyCDS 使用指南 +desc: 本课程将针对 Python 程序启动时间进行分析,并说明 PyCDS 能够在哪些方面加速 Python 程序的启动 +type: developer +total_time: 20min +level: beginner +chapters: + - name: PyCDS 使用指南 + desc: 本课程将针对 Python 程序启动时间进行分析,并说明 PyCDS 能够在哪些方面加速 Python 程序的启动 + content: + live_time: 20min \ No newline at end of file -- Gitee