【问题标题】:Reading lines of file into xargs for parallel python script将文件行读入 xargs 以实现并行 python 脚本
【发布时间】:2021-12-18 07:00:00
【问题描述】:

我正在尝试通过使用文件的行作为 python 脚本的参数来并行执行 python 脚本。该文件名为experiments.txt,可能如下所示:

--x_timesteps 3 --y_timesteps 3 --exp_path ./logs
--x_timesteps 4 --y_timesteps 3 --exp_path ./logs
--x_timesteps 5 --y_timesteps 3 --exp_path ./logs
--x_timesteps 6 --y_timesteps 3 --exp_path ./logs

我想通过使用 xargs 来加快处理速度;但是,我不知道如何使用文件输入来做到这一点。 如何通过从文件中逐行读取并通过管道传输到 xargs 来并行化 python 脚本?

我知道我可以通过一个简单的 for 循环来解决这个问题;但是,我需要知道如何处理文件输入。

在相应目录的命令行中输入此内容,

for x in {3..6}; \
do printf '%s\0' "--x_timesteps=${x}" "--y_timesteps=3" "--exp_path=./logs"; \
done | xargs -0 -n 3 -P 8 python script.py

for-loop风格的并行化源于"Using xargs for parallel Python scripts"的答案

【问题讨论】:

  • 您是否尝试过类似< experiments.txt xargs -n 2 -P 8 python script.py 将文件输入到xargs 中?
  • 我试过while read line; do printf '%s\0' "$line"; done < experiments.txt | xargs -0 -n 3 -P 8 python script.py scale_rank3不成功。

标签: python bash parallel-processing


【解决方案1】:

恕我直言,使用 GNU Parallel 更简单、更可控:

parallel --dry-run --colsep ' ' python script.py :::: experiments.txt

您可以简单地添加或删除--dry-run 进行调试。您可以添加--eta 或--bar 以获取进度报告。您可以跨多个主机分配任务。您可以轻松地进行失败/重试处理。您可以从参数中提取基本名称、文件名、目录名称。您可以对参数进行排列。以此类推。

【讨论】:

  • 我使用的是 Windows 10,但看起来我可以通过 Anaconda 获得 GNU Parallel。我会试试这个并很快回来报告。
  • 这里有 Ole Tange 的优秀 PDF zenodo.org/record/1146014/files/…
  • 效果很好!太感谢了!我最初尝试 xargs 是因为我的教授在我们的开放实验室作业的规范中使用了它,但我一直在努力使 xargs 的使用适应我的个人项目。再次感谢!
  • @JaredFrazier GNU Parallel 也支持 CygWin。
猜你喜欢
  • 2017-02-04
  • 1970-01-01
  • 2011-02-24
  • 2015-05-12
  • 2011-03-20
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多