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 0000000000000000000000000000000000000000..1597dafe2a5a3b7eb2923d3e2a0c3c6d10f8f63c --- /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 0000000000000000000000000000000000000000..291e3351416a430818ac38b50f08758a0d2680cc --- /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 0000000000000000000000000000000000000000..ec54b584d962f4b35e95a2ef36e0fd0798f275aa --- /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 0000000000000000000000000000000000000000..86abd918cb9a3bcf6781f76452387fc89e045df3 --- /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 0000000000000000000000000000000000000000..083a0754b56ea1c6edb658d5ab262b63fa634c61 --- /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 0000000000000000000000000000000000000000..fcf02733cfa0aaeb8301efd9be9766decd5ea0c1 --- /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