Kyl*_*yle 25 python parallel-processing pip
我们的Django项目变得越来越大.我们有数百个应用程序,并使用大量的第三方python包,其中许多需要C编译.当我们需要为主要版本创建新的虚拟环境时,我们的部署需要很长时间.话虽如此,我希望从Pip开始加快速度.有没有人知道将会并行安装软件包的Pip的分支?
到目前为止我采取的步骤:
我找了一个项目,但这个项目没那么成功.我确实找到了这个Github Gist:https://gist.github.com/1971720但结果几乎与我们的单线程朋友完全相同.
然后我在Github上找到了Pip项目并开始查看分支网络,看看我是否能找到任何提及我正在尝试做的提交.那里很乱.如果必须的话,我会把它分叉并尝试自己并行化,我只是想避免花时间做这件事.
我在ep.io上看到了DjangoCon 2011上的一个演讲,解释了他们的部署内容,他们提到并行化pip,运送.so文件而不是编译C和镜像Pypi,但他们没有涉及他们是如何做到的或者他们使用的是什么.
此示例使用xargs将构建过程并行化大约4倍.您可以使用下面的max-procs增加并行化因子(使其大致等于您的核心数).
如果您正在尝试加速您正在反复进行的成像过程,那么直接在结果上进行成像而不是每次都这样做可能更容易且绝对更低的带宽消耗,或者使用pip构建图像-t或virtualenv.
并行下载和安装软件包,一次四个:
xargs --max-args=1 --max-procs=4 sudo pip install < requires.txt
Run Code Online (Sandbox Code Playgroud)
注意:xargs在不同的Linux发行版上具有不同的参数名称.有关详细信息,请查看您的发行版的手册页.
cat << EOF | xargs --max-args=1 --max-procs=4 sudo pip install
awscli
bottle
paste
boto
wheel
twine
markdown
python-slugify
python-bcrypt
arrow
redis
psutil
requests
requests-aws
EOF
Run Code Online (Sandbox Code Playgroud)
警告:如果多个pip试图在同一时间安装相同的依赖关系,那么这种方法的速度很可能会混淆包清单(取决于你的发行版),但是如果你只做4一时间 它可以很容易地修复pip install --uninstall depname.
基于Jamieson Becker的回答,以下代码并行执行Pip下载,然后快速安装软件包.
首先,我们将包并行下载到分发("dist")目录中.这很容易并行运行,没有冲突.打印出的每个包名称在下载之前打印出来,这有助于调试.如需其他帮助,请更改-P9为-P1,按顺序下载.
下载后,下一个命令告诉Pip安装/更新软件包.不下载文件,它们是从快速本地目录中获取的.
它与当前版本的Pip 1.7兼容,也与Pip 1.5兼容.
要仅安装软件包的子集,请将"cat requirements.txt"语句替换为自定义命令,例如"egrep -v github requirement.txt"
cat requirements.txt | xargs -t -n1 -P9 pip install -q --download ./dist
pip install --no-index --find-links=./dist -r ./requirements.txt
Run Code Online (Sandbox Code Playgroud)
您是否分析了部署过程以了解时间到底在哪里?令我惊讶的是,运行多个并行pip进程并不会加快速度.
如果时间去查询PyPI并找到包(特别是当你也从Github和其他来源下载时)那么设置你自己的PyPI可能是有益的.您可以自己托管PyPI并将以下内容添加到您的requirements.txt文件中(docs):
--extra-index-url YOUR_URL_HERE
Run Code Online (Sandbox Code Playgroud)
如果您想完全替换官方PyPI,请执行以下操作:
--index-url YOUR_URL_HERE
Run Code Online (Sandbox Code Playgroud)
这可以加快下载时间,因为现在可以在附近的机器上找到所有包.
很多时候也用C代码编译包,比如PIL.如果这成为瓶颈,那么值得研究在多个进程中编译代码.您甚至可以在您的机器之间共享已编译的二进制文件(但许多事情需要类似,例如操作系统,CPU字长等)
| 归档时间: |
|
| 查看次数: |
10240 次 |
| 最近记录: |