2017-04-24 10 views
-2

私は一般的にコーディング/スクリプティングには少し新しく、マルチプロセッシングを実装する助けが必要です。Pythonマルチプロセッシングを使用してルータにログインする

私は現在、ここで2つの機能を説明します。最初の、def getting_routes(router):はすべての私のルータにログインし(ルータのリストは以前の機能から来ています)、コマンドを実行します。 2番目の関数 `def parse_paths(routes):このコマンドの結果を解析します。

def get_list_of_routers 
<some code> 
    return routers 

def getting_routes(router): 
    routes = sh.ssh(router, "show ip route") 
    return routes 

def parse_paths(routes): 
    l = routes.split("\n") 
...... <more code>..... 
return parsed_list 

私のリストは、およそ50ルータ長く、その後の解析と一緒に、私は、ルータ、コマンドの実行にsshingを実行するために、マルチプロセッシングモジュールを使用したいのですがかなりの時間を要し、その後の解析でありますすべてのルータで並列に動作します。 私が書いた:私が好きな何

#!/usr/bin/env python 
import multiprocessing.dummy import Pool as ThreadPool 
def get_list_of_routers (***this part does not need to be threaded) 
<some code> 
    return routers 

def getting_routes(router): 
    routes = sh.ssh(router, "show ip route") 
    return routes 

def parse_paths(routes): 
    l = routes.split("\n") 
...... <more code>..... 
    return parsed_list 

if __name__ == '__main__': 
    worker_1 = multiprocessing.Process(target=getting_routes) 
    worker_2 = multiprocessing.Process(target=parse_paths) 


    worker_1.start() 
    worker_2.start() 

は、コマンドを実行し、解析された出力を返す、ルータに並列sshingためです。私はhttp://kmdouglass.github.io/posts/learning-pythons-multiprocessing-module.htmlとマルチプロセッシングモジュールを読んでいますが、まだ必要な結​​果を得ておらず、未定義のエラーが続いています。マルチプロセッシングモジュールで何が欠落しているかについての助けがありますか?前もって感謝します!

答えて

0

ルータパラメータをgetting_routes機能に送信していないようです。

また、スレッドを使用すれば十分であると思います。新しいプロセスを作成する必要はありません。

メインブロックにループを作成して、get_list_of_routers関数から返される各ルータの新しいスレッドを開始します。次に、2つのオプションがあります。parse_paths関数をスレッド内から呼び出すか、スレッドから戻り値を取得してparse_pathsを呼び出します。例えば

:スレッド輸入スレッド

que = Queue.Queue() 
threads = [] 


for router in get_list_of_routers(): 
    t = Thread(target=lambda q, arg1: q.put(getting_routers(arg1)), args=(que, router)) 
    t.start() 
    threads.append(t) 


for t in threads: 
    t.join() 


results = [] 
while not que.empty(): 
    results.append(que.get()) 


parse_paths(results) 
から インポートキュー
関連する問題