Bashを使用してPythonスクリプトを200,000回並列に実行します。

Bashを使用してPythonスクリプトを200,000回並列に実行します。

Pythonスクリプトを200,000回実行する必要があります。 bashを使って並列に実行できますか? 20万回だから少なくとも10スレッドを同時に使いたいのに

ベストアンサー1

this.py以下を想定してください。

#!/usr/bin/python
from datetime import datetime
now = datetime.now()
print now

Bashでは、次のコードはthis.py20,000ラウンドの間に10のプロセスを同時に実行します。 10のプロセスが完了すると、次のラウンドが始まります。これにより、this.py一度に10個のスレッドのみを使用しながら200,000回実行できます。

#!/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

...または1行を使用してください。

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

...など。

また見るGNUパラレルおそらく、保有しているコア数だけ同時ジョブを実行することに制限されると思います。parallel複数のプロセスを実行すると、この警告を防ぐことができます。ループなどの優れた代替手段です。

おすすめ記事