为子流程作业做好准备

问题描述 投票:0回答:1

我有一个简单的分布式脚本,该脚本从文件中读取主机列表并为我部署SSH群集(到目前为止非常好)。我不使用dask-worker命令行工具,因为我希望一切都从一个父python脚本启动。我想使用这样设置的集群来使用subprocess.run或在工作节点上执行类似的操作来运行各种作业。

我要运行的进程是python作业,需要在适当的conda环境中启动。这就是我遇到的问题:尝试激活conda环境会使我在Your shell has not been properly configured to use 'conda activate'.中得到stderr

我正在将subprocess.runshell=True一起使用。鉴于我的普通shell已设置为使用conda,因此我对该错误感到有些惊讶。

敏捷的分布式工作者似乎具有非常有限的环境(我的.bashrc未加载),而且我似乎甚至无法提供源文件来尝试将其添加到环境中。如果我使用非分布式设置(distributed.Client()),则激活相关的conda env没有问题,因此我想这与dask分布式远程工作者环境的工作方式有关。我知道conda和相关环境在远程节点上可用(它们都安装了相同的文件系统)。

所以,有一种简单的方法可以对一个敏捷的分布式远程工作者说:“使用此conda环境启动此python脚本”,最好使用subprocess.run

python subprocess environment dask-distributed
1个回答
0
投票

这原来是bash使用问题,而不是与dask有关。

如果我们强制bash是交互式的,那么我们将获得期望的环境并可以运行作业。我寻找了一个更优雅的解决方案,但是您很快就陷入困境,以为您的发行版认为应将其用作登录vs非登录shell,交互式vs非交互式shell环境的细节陷入困境。

© www.soinside.com 2019 - 2024. All rights reserved.