マップを使用して、ping_all関数をホストのリストにマップしようとしています。 問題は、ping_all関数の中で、すべての失敗したホストをリストに追加しようとしていることです。通常、私はping_all関数を呼び出し、引数として空のリストを渡し、変更されたリストを返しますが、ここでマップを使用しているので、それを達成する方法がわかりません。マップ機能を使用してリストに追加するにはどうすればよいですか?
import os
import argparse
from subprocess import check_output
from multiprocessing import Pool
parser = argparse.ArgumentParser(description='test')
args = parser.parse_args()
dead_hosts = []
def gather_hosts():
""" Returns all environments from opsnode and puts them in a dict """
host_list = []
url = 'http://test.com/hosts.json'
opsnode = requests.get(url)
content = json.loads(opsnode.text)
for server in content["host"]:
if server.startswith("ip-10-12") and server.endswith(".va.test.com"):
host_list.append(str(server))
return host_list
def try_ping(hostnames):
try:
hoststatus = check_output(["ping", "-c 1", hostnames])
print "Success:", hostnames
except:
print "\033[1;31mPing Failed:\033[1;m", hostnames
global dead_hosts
dead_hosts.append(hostnames)
def show_dead_hosts(dead_hosts):
print '\033[1;31m******************* Following Hosts are Unreachable ******************* \n\n\033[1;m'
for i in dead_hosts:
print '\033[1;31m{0} \033[1;m'.format(i)
if __name__ == '__main__':
hostnames = gather_hosts()
pool = Pool(processes=30) # process per core
pool.map(try_ping, hostnames, dead_hosts)
show_dead_hosts(dead_hosts)
私はマップに2番目の引数としてdead_hostsを渡してみましたが、このスクリプトを実行した後、dead_hostsは空のリストのまま、ホストがリストに追加されていることを表示されません。
私は間違っていますか?
identity = lambda行のポイントは何ですか? – david
私はちょうどそれがアイデンティティラムダを直接フィルタ呼び出しに置くことよりも読みやすいと思った。あなたが好きなら、それはもちろんインラインにすることができます。 – DaoWen
しかし、私はなぜこの行が必要であるのか分かりません – david