使用gevent并行ping

时间:2016-10-15 01:32:34

标签: python gevent

我是python的新手,我正在尝试运行此代码,希望并行ping多台机器。但我不能同时ping所有IP。好像它一个接一个地运行。有些人请指导我如何同时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)

2 个答案:

答案 0 :(得分:1)

os.system未修补,但subprocess.call已修补;将os.system替换为subprocess.call(如果您使用的是Python 3.5 +,也可以使用subprocess.run

import subprocess

...

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

答案 1 :(得分:0)

问题是os.system("ping -c 5 " + switch)正在同步运行,因为该功能正在阻塞。你应该尝试在不同的过程中做到这一点。

这是一个执行相同操作的并发代码。

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()