2017-01-05 8 views
0

複数のマシンに接続し、それらのコマンドを実行する必要があります。私はスレッドでこれを実装したいが、これをどのように達成できるかはわからない。続き はコードです:Pythonでスレッディングを使って複数のマシンに接続する

import threading 

def conn_to_board(board_ip): 
    # ssh connection to machine 
    # set of commands 

board_ip = ["1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4"] 

''' 
for i in board_ip: 
    t1 = threading.Thread(target=conn_to_board, args=(i,)) 
    t1.start() 
    t1.join() 
''' 

誰かがスレッドでこれを達成するために私を助けることができますか?

+0

は[pxssh](HTTPを見てください.readthedocs.io/ja/stable/api/pxssh.html)モジュールを、[pexpect](http://pexpect.readthedocs.io/en/stable/index.html)ライブラリにインストールします。 –

答えて

1

ファンクションconn_to_board(board_ip)がすでに同じローカルポートをバインドしていないか、またはexclusiveluがリソースを使用していると仮定すると、マルチスレッドは簡単でコードはほぼ正しいです。あなたのコメントされたコードで見ることができる唯一の問題は、ループ内の各スレッドに実際にシリアル化することです - 別の言い方をすれば、ここではマルチスレッドは完全に役に立たないと言います。

あなたは最初に作成して起動し、すべてのスレッドを(数が十分に低い場合)して、新しいループ内でそれらを結合する必要があります:// pexpect:

... 
thrs = [] # to store the threads 
for i in board_ip: # create and start the threads 
    t1 = threading.Thread(target=conn_to_board, args=(i,)) 
    t1.start() 
    thrs.append(t1) 
for t1 in thrs:  # join all the threads 
    t1.join() 
+0

Sergeに感謝、私はあなたの答えから逃したものを得ました!それは今働いている。 –

1

AnsibleまたはSaltを再発明しようとしているようです。これらのツールのいずれかを使用して調査を行い、多くのマシンで一連のシェルコマンドを実行するという目標を達成することができます。どちらもPythonで書かれ、拡張可能です。

関連する問題