在许多输入上运行程序的工具
each的Python项目详细描述
每个命令都是一个shell命令,用于运行健壮的、并行的、具有良好反馈机制的循环。
它是为“中等规模”的实验而优化的,这些实验太小了,而且 特别是在一个适当的集群上运行(或者您只是没有拥有一个适当的集群。我不知道, 但是速度太慢,从头开始会很痛苦,理想情况下, 足够并行,如果碰巧有一个16核服务器在上面运行它们,那么您真的希望使用所有16核。
它们的主要用途是以下bash for loop的更健壮版本:
for f in "$source"/* ;doDEST="$destination"/$(basename $f) mkdir -p "$DEST""$command" < "$f" > "$DEST/out"2> "$DEST/err"echo$? > "$DEST/status"done
可以使用以下每种方法编写相同的文件:
each "$source""$command" --destination="$destination"
除了简短易读之外,每次写这篇文章都能让你:
- 自动并行。您可以控制使用--processes=n运行多少个进程, 但它默认使用除一个可用内核之外的所有内核(或在单核计算机上使用一个)。
- 自动恢复-如果每一个死亡,当它下次启动时,它将从它停止的地方恢复。
- 对进度的反馈,以及对流程何时完成的良好预测分析(仍在进行中,但基本情况已存在)。
稍后,您还将获得重试错误的良好逻辑,但我还没有写那一点。
每一个都还很早,所以它可能有一些粗糙的边缘,但它是很好的测试,已经使我的生活大大改善。
用法
用法是:
each some-input-directory 'some command to run' --destination="output directory"
命令可以是任意的shell命令(默认情况下由$SHELL -c 'some command to run'运行)。
默认情况下,文件的内容将传递给子进程的stdin。如果要按名称传递文件,可以使用特殊字符串{}。 如果这样做,将用要处理的文件替换它(用它的绝对路径名),stdin将为空。
可以从each --help获得更高级的使用选项。
常见问题
为什么?
我有一堆实验,基本上是“运行这个长时间运行的任务 这些文件中的每一个任务都有不同程度的片状,而我 一直发现自己在写不好的版本,所以我想我会解决 这个问题一劳永逸。
Bash Loop版本的主要功能:
- 你不会冒险去学怎么写比你想写的更多的bash。
- 如果你杀了它,它会从停止的地方恢复。
- 自动并行
- 你会得到一个很酷的进度条。
- 当我开始编写更好的重试功能时,您将免费获得这些功能。
如何安装?
pip install each
它运行在什么上?
可能有什么不合时宜的。我已经在linux(包括wsl、windows)上开发并测试了它 10个Linux子系统),但它可能在OSX上未经修改就可以工作。不太可能成功 窗户。如果有人想提供windows支持,我并不反对,但我不会 是我自己写的,这是一种相当单一的工具。
我应该用这个吗?
呃,也许吧。我觉得它很有帮助,但可能对我的 用法。
如果你尝试它,但它不适合你,提出一个问题或公关。 我很高兴它通常是有用的,但我不打算投入太多 支持它的时间。
你能让它在python 2上工作吗?
编号
你能在更宽松的许可证下释放它吗?
另外编号
我不喜欢这些答案。我应该用什么代替?
我不知道。也许是bashreduce?