私はFabricを使用してリモートホスト上でテストを起動し、テストのotuputファイルを取得し、解析を行うPythonスクリプトを用意しています。 Pythonスクリプトはファブファイルではありません。fabfileを使用せずにFabricを使用してリモートホスト上で並列にコマンドを発行するにはどうすればよいですか?
テストを並行して起動して実行したいと思います。私は "@parallel"デコレータの使い方を読んだことがありますが、私が読んだ例ではスクリプトがfabfileとしてあります。これは、コードの簡易版である
from fabric.api import *
# Copy the testfile on each of the hosts. This is sequential, it could be
# done in parallel but doing it in parallel is not that important
def copy_test(host_list, testfile_name):
for x in host_list:
env['host_string'] = x
target_testfile_name = "/tmp/" + testfile_name
put(testfile_name, target_testfile_name)
@parallel # Would this decorator work?
def run_test(host_list, testfile_name):
target_testfile_name = "/tmp/" + testfile_name
for x in host_list:
env['host_string'] = x
run(target_testfile_name)
if __name__ == '__main__':
HOSTS = ['10.10.10.10', '10.10.10.11', '10.10.10.12', '10.10.10.13']
testfile_name = "foo.py"
copy_test(HOSTS, testfile_name)
# I would like to launch run_test() in parallel
run_test(HOSTS, testfile_name)
:
私のコードは次のようなものです。私はすべてを含めていないが、それは私が何か発行fabfileとしてこのスクリプトを使用して、私を制限して、私は、ホストの設定情報を中心に渡す:「FAB -H '10 .10.10.10' copy_test」
を
"FAB -H '10 .10.10.10' RUN_TEST" -P
私は(RUN_TESTを実行することができる)threading.Threadsライブラリを使用したが、私はむしろ、最後の手段としてあることをするでしょう。
ご覧のとおり、私はこれをファブファイルとして実行していません。
"fabfile"としてスクリプトを実行せずに、Fabricの並列実行モデルを使用してrun_test()を実行する方法はありますか?
もう一つのことは、ファブリックの環境変数について知っていますか? 'env.hosts'にあなたのホストリストを保存することができるので、引数として渡す必要はありません – pwnsauce
pwnsauce、提案に感謝します。私はそれを試し、私の問題を解決するかどうかを見ます。 – SQA777