在许多输入上运行程序的工具

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"

除了简短易读之外,每次写这篇文章都能让你:

  1. 自动并行。您可以控制使用--processes=n运行多少个进程, 但它默认使用除一个可用内核之外的所有内核(或在单核计算机上使用一个)。
  2. 自动恢复-如果每一个死亡,当它下次启动时,它将从它停止的地方恢复。
  3. 对进度的反馈,以及对流程何时完成的良好预测分析(仍在进行中,但基本情况已存在)。

稍后,您还将获得重试错误的良好逻辑,但我还没有写那一点。

每一个都还很早,所以它可能有一些粗糙的边缘,但它是很好的测试,已经使我的生活大大改善。

用法

用法是:

each some-input-directory 'some command to run' --destination="output directory"

命令可以是任意的shell命令(默认情况下由$SHELL -c 'some command to run'运行)。

默认情况下,文件的内容将传递给子进程的stdin。如果要按名称传递文件,可以使用特殊字符串{}。 如果这样做,将用要处理的文件替换它(用它的绝对路径名),stdin将为空。

可以从each --help获得更高级的使用选项。

常见问题

为什么?

我有一堆实验,基本上是“运行这个长时间运行的任务 这些文件中的每一个任务都有不同程度的片状,而我 一直发现自己在写不好的版本,所以我想我会解决 这个问题一劳永逸。

Bash Loop版本的主要功能:

  1. 你不会冒险去学怎么写比你想写的更多的bash。
  2. 如果你杀了它,它会从停止的地方恢复。
  3. 自动并行
  4. 你会得到一个很酷的进度条。
  5. 当我开始编写更好的重试功能时,您将免费获得这些功能。

如何安装?

pip install each

它运行在什么上?

可能有什么不合时宜的。我已经在linux(包括wsl、windows)上开发并测试了它 10个Linux子系统),但它可能在OSX上未经修改就可以工作。不太可能成功 窗户。如果有人想提供windows支持,我并不反对,但我不会 是我自己写的,这是一种相当单一的工具。

我应该用这个吗?

呃,也许吧。我觉得它很有帮助,但可能对我的 用法。

如果你尝试它,但它不适合你,提出一个问题或公关。 我很高兴它通常是有用的,但我不打算投入太多 支持它的时间。

你能让它在python 2上工作吗?

编号

你能在更宽松的许可证下释放它吗?

另外编号

我不喜欢这些答案。我应该用什么代替?

我不知道。也许是bashreduce

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图形Java仿射变换以旋转通用路径   IntelliJ IDEA中的java代码标记为编译器错误,在Eclipse中可以正常工作   java ArrayList的containsAll返回了错误的值   如何在安卓中的片段活动中添加java代码   java通过使用netbeans调用jbutton,将带有行的jbutton添加到jtable中   java在更新arrayAdapter/listView之前更新最终列表   java如何在另一个项目中导入包含AspectJ方面和注释的项目   为什么我的java布尔测试总是失败?   Eclipse中的java自动激活   在Bluetooth for Java(更具体地说是Android)之上是否有TCP/IP协议栈实现?   java Android Studio通过intent传递ArrayList并填充ListView