【问题标题】:Multiprocessing of python scriptspython脚本的多处理
【发布时间】:2019-07-01 06:07:44
【问题描述】:

我想在 bash shell 中并行运行多个 python 脚本(比如说 script1.py 到 script10.py)。有人可以建议使用 xargs 命令同时运行所有内容的最佳方法是什么?还是有其他建议?提前致谢

【问题讨论】:

  • 为什么要在 bash shell 中运行它?如果没有具体原因,我建议您使用 multiprocessing 包为每个脚本生成一个进程并并行执行它们。
  • 当然可以。谢谢

标签: python bash parallel-processing multiprocessing xargs


【解决方案1】:

使用 bash:

for i in {1..10}; do 
    python script${i}.py &
done

【讨论】:

  • 如果您想等待任务完成,请使用wait bash 命令。
  • 谢谢@rene-d。一旦我在 bash 命令中将单个代码作为 (python script1.py) 运行,它就可以工作,但是当我将循环保存在 bash 文件中然后运行时,它会显示:python: command not found。知道为什么这不起作用吗?
  • 你的环境是什么,Linux/macOS?窗户?基本上在 Linux 或 macOS 中,我看不出从提示符运行或从脚本文件运行 python 命令之间没有区别(除非 python 是 bash 别名)。
  • 我使用的是 Windows10,但是我在我的 bashrc 中安装了 bash 并定义了 python 路径。但这在我执行 bash 脚本时不起作用
  • 如果你输入 bash,得到 bash 提示并输入 python :会发生什么? (可能找不到命令)我个人放弃了在我的 w10 计算机上使用 python :p
【解决方案2】:

您需要考虑一些注意事项。 (其他答案没有考虑)

  • 脚本是为独立运行而开发的吗?如果是这样的话,这就更容易了。如果没有,那么您将需要一个脚本管道来管理 Python 的 Luigi 等依赖项。

  • 脚本可能需要不同的 Python 解释器版本。 (2.7 与 3.7 等)

  • 如果您决定继续使用 Bash,那么使用 nohup 将确保在调用进程结束时进程不会退出。

这个问题并不像你想象的那么简单。

【讨论】:

  • 抱歉不清楚。所有脚本都是独立的。
【解决方案3】:

我是 xargs -P<number> 这类用例的粉丝,特别是因为它会等待所有正在运行的孩子完成。

假设您有多个脚本,但仍然是例如最多并行 4 个,您可以:

ls -1 ./script*.py | xargs -I% -P4 sh -c '%'

如果您碰巧需要向脚本传递更多参数,只需将它们添加到上述 % 之后(引号内)

【讨论】:

  • 谢谢@jjo。一旦我运行该行,它就会给我 ImportError 消息。似乎 xargs 找不到特定的 python 路径。有没有办法解决python路径?我已经在我的 bashrc 中定义了它。
猜你喜欢
  • 1970-01-01
  • 2017-11-17
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 2013-09-02
相关资源
最近更新 更多