1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| from concurrent.futures import ThreadPoolExecutor
import subprocess
def pingAdr(adresse):
# Je suis sous linux, donc jai commenté ça
# os.chdir('c:\\')
# Je remplace le vieux os.popen par le nouveau module subprocess
# a = os.popen('ping '+adresse+' -n 1 -w 500')
# chaine=a.read()
# a.close()
ping_proc = subprocess.Popen(['ping', '-n 1', '-w 500 ', adresse], universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
chaine = ping_proc.stdout.read()
ping_proc.wait() # Just in case
if chaine.find('TTL')>1:
return(adresse+' : '+chaine[chaine.find('temps')+5:chaine.find('TTL')-1])
else:
return(adresse+' : pas de reponse')
# Une liste dIP de test
listeIP = ['192.168.0.1', '192.168.0.2', '192.168.0.3', '192.168.0.4', '192.168.0.5',
'192.168.0.6', '192.168.0.7', '192.168.0.8', '192.168.0.9', '192.168.0.10',
'192.168.0.11', '192.168.0.12', '192.168.0.13', '192.168.0.14', '192.168.0.15',
'192.168.0.16', '192.168.0.17', '192.168.0.18', '192.168.0.19', '192.168.0.20']
# Le super-simple à utiliser ThreadPoolExecutor de concurrent.futures
# (ici, avec au maximum 12 threads, à toi de voir
)
# Si tu veux une vraie exécution parallèle (ce qui ne se justifie pas ici, à mon avis
),
# utilise plutôt ProcessPoolExecutor *linterface est exactement la même
with ThreadPoolExecutor(max_workers=12) as executor:
future = executor.map(pingAdr, listeIP)
for res in future:
print(res) |
Partager