質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

4回答

8505閲覧

シェルスクリプトでpythonのプログラムを並列実行したいです。

apeirogon0813

総合スコア117

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/29 11:56

編集2020/01/29 11:56

bashにおいて、シェルスクリプトを

sh

1#!/bin/sh 2 3python3.7 1.py & 4python3.7 1.py & 5python3.7 1.py & 6python3.7 1.py & 7python3.7 1.py

のように並列実行したのですが、並列実行する数が多くなるとプログラムの見栄えが悪いので、他の方法があればご教示くだい。
ちなみにxargsで以下のようにしても、うまく実行されませんでした。
ご教示願います。

$seq 10 | xargs -P 5 python3.7 1.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

sh

1seq 10 | xargs -P 5 python3.7 1.py

だと、python3.7 1.py 1 2 3 4 5 6 7 8 9 10という1つのコマンドが実行されます。

sh

1seq 10 | xargs -I@ -P 5 python3.7 1.py

にすると、python3.7 1.pyが10個、最大5並列で動きます。
(1~5番目のどれかが終わると6番目がスタートする)

動かす数と、並列数が同じでよい場合だと、下記がわかりやすいです。

Bash

1for i in {1..5} 2do python3.7 1.py & 3done

投稿2020/01/29 13:42

otn

総合スコア85768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こうやってみてはどうですか?

#! /bin/sh cnt=0 while [ $cnt -lt 10 ] do python3.7 1.py & cnt=`expr $cnt + 1` done python3.7 1.py

-lt の右の数字がループ回数になるかと
最後の & 無し実行が含まれるので、計 11個起動する事になるかと思います。

投稿2020/01/29 12:28

ShinyaAnan

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sh -c で実行するのはどうでしょうか。

sh

1$ seq 10 | xargs -n 1 sh -c 'python3.7 1.py &'

投稿2020/02/01 14:56

shiketa

総合スコア4041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問の直接の答えではないですが、python code 内部で、複数のプロセスを作るっていうのはどうでしょう。

main() を既存のpython script で置き換えれば

python.exe program.py <count>

で、<count> のプロセスが、main() を実行します。

py

1from multiprocessing import Process 2import sys 3import time 4 5def main(index): 6 print(f"start a program: {index}") 7 ## 8 time.sleep(index) 9 ## 10 print(f"end the program: {index}") 11 12if __name__ == "__main__": 13 if len(sys.argv) != 2: 14 count = 1 15 else: 16 count = int(sys.argv[1]) 17 18 proc_list = [] 19 for i in range(0, count): 20 proc = Process(target=main, args=(i + 1,)) 21 proc.start() 22 proc_list.append(proc) 23 24 for i in range(0, count): 25 proc_list[i].join()

投稿2020/01/30 05:40

mmaeda

総合スコア269

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問