我是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)
答案 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()