2016-10-15 19 views
3

私はPythonには新しく、このコードを実行して複数のマシンの並列pingを実行しようとしています。しかし、すべてのIPを同時にpingすることはできません。私は複数のサーバーを同時にpingすることができますか?geventを使用した並列ping

import gevent 
import urllib2 
import os 
from gevent import monkey 
monkey.patch_all() 


def print_head(i): 
    switch='192.168.182.170' 
    response = os.system("ping -c 5 " + switch) 


jobs = [gevent.spawn(print_head, i) for i in range(1,10)] 
gevent.joinall(jobs, timeout=2) 

答えて

1

os.systemパッチが適用されず、subprocess.callは、パッチが適用されます。問題は、機能がブロックされているのでos.system("ping -c 5 " + switch)は、同期的に実行されていることである(あなたは、Pythonを使用している場合もsubprocess.runを使用することができます3.5+)

import subprocess 

... 

def print_head(i): 
    switch = '192.168.182.170' 
    response = subprocess.call("ping " + switch, shell=True) 
0

subprocess.callos.systemを交換してください。あなたは別のプロセスでそれをしようとする必要があります。

同じコードを実行する同時コードがあります。

from multiprocessing import Process 
import os 

def print_head(i): 
    switch='192.168.182.170' 
    response = os.system("ping -c 5 " + switch) 

processes = [Process(target=print_head, args=(i,)) for i in range(1,10)] 
for process in processes: 
    process.start() 
+0

このソリューションに感謝します。 10000台のサーバで稼働させた場合、約90秒の時間がかかります。このスクリプトのパフォーマンスを向上させる方法はありますか?プロセスあたり90秒未満の時間がかかったのは、 –

+0

です。 –

+0

混乱して申し訳ありません。私が範囲---(1,10000)内の---に対してprocess = [Process(target = print_head、args =(i、))]のようなコードを使用した場合、90秒で終わります。それが60秒に近づくべき方法はありますか? –

関連する問題