我需要运行我的 Python 脚本 200,000 次。是否可以使用 bash 并行执行?由于是 200,000 次,我想同时使用至少 10 个线程
答案1
假设this.py
包含以下内容:
#!/usr/bin/python
from datetime import datetime
now = datetime.now()
print now
在 Bash 中,以下代码将this.py
同时执行 10 个进程 20,000 轮。 10 个流程完成后,下一轮开始。这将允许您执行this.py
200,000 次,而一次仅使用 10 个线程。
#!/bin/bash
for i in {1..20000}; do
echo -e "\nROUND $i\n"
for j in {1..10}; do
/path/to/this.py &
done
wait
done 2>/dev/null
...或者使用单行:
for i in {1..20000}; do echo -e "\nROUND $i\n"; for j in {1..10}; do /path/to/this.py & done; wait; done 2>/dev/null
您显然可以排除该echo
行。我这样做只是为了测试目的,并在 STDERR 重定向到/dev/null
.我的输出如下所示:
ROUND 1
2015-10-09 23:20:12.432295
2015-10-09 23:20:12.444988`
2015-10-09 23:20:12.471788
2015-10-09 23:20:12.482884
2015-10-09 23:20:12.519446
2015-10-09 23:20:12.558949
2015-10-09 23:20:12.560826
2015-10-09 23:20:12.582571
2015-10-09 23:20:12.600680
2015-10-09 23:20:12.625727
ROUND 2
2015-10-09 23:20:12.761279
2015-10-09 23:20:12.764459
2015-10-09 23:20:12.801361
2015-10-09 23:20:12.831900
2015-10-09 23:20:12.853339
2015-10-09 23:20:12.877965
2015-10-09 23:20:12.921946
2015-10-09 23:20:12.950549
2015-10-09 23:20:12.973625
2015-10-09 23:20:12.986714
ROUND 3
2015-10-09 23:20:13.128276
2015-10-09 23:20:13.169144
2015-10-09 23:20:13.222183
2015-10-09 23:20:13.234889
2015-10-09 23:20:13.242653
2015-10-09 23:20:13.246504
2015-10-09 23:20:13.305419
2015-10-09 23:20:13.306198
2015-10-09 23:20:13.317769
2015-10-09 23:20:13.328895
...ETC。
还查看GNU 并行,尽管我认为它可能仅限于运行与您拥有的核心数量一样多的并发作业。您可以通过运行多个parallel
进程来避免该警告。它是循环等的一个很棒的替代品。