Witam, jestem w trakcie tworzenia programu odpytujący wskazane adresy ip i informowanie mailowo o braku odpowiedzi od danego adresu ip. Kod pisany jest w pythonie, niedawno zacząłem uczyć się tego języka.
Warunkiem koniecznym prawidłowego działania programu jest to aby adresy odpytywane były równocześnie (w innym wypadku przy odpytywaniu dużej ilości łączy program nie będzie monitorował działania innych łączy niż to obecnie sprawdzane). Do tego celu chcę wykorzystywać wątki oraz kolejkowanie. Mam napisany kod, ale nie działa on tak jak tego chcę. Mianowicie adresy ip odpytywane są po kolei (odpytywanie kolejnego łącza zaczyna się gdy odpytywanie poprzedniego łącza się zakończy). Przypuszczam, że źle rozumiem wątki. Teoretycznie wszystkie jest zrozumiałe, ale najwyraźniej nie potrafię zastosować ich w praktyce. Wiem, że można znaleźć w sieci gotowe programy do sprawdzenia adresów ip, ale chcę napisać taki program sam. Być może ktoś będzie w stanie wskazać mi błąd jaki popełniłem. Z góry dziękuję za pomoc. Kod poniżej.
import socket
import os
import sys
import threading
from queue import Queue
#debug
import time
start = time.time()
print_lock = threading.Lock()
def threader():
while True:
ip = q.get()
q.task_done()
q = Queue()
for x in range (300):
t = threading.Thread(target=threader)
t.daemon = True
t.start()
def checkVitality():
ip_range = ['10.0.0.10','192.168.43.247','192.168.43.1','10.0.0.23']
for ip in ip_range:
#vitality = os.system("ping -c 1 " + ip + "> /dev/null 2>&1 ") # for linux
vitality = os.system("ping -n 1 -w 100 " + ip + "> nul" ) # for windows
if vitality == 0:
print(ip, vitality)
q.put(ip)
else:
print(ip, "down")
checkVitality()
q.join()
#debug
print(time.time()-start, 'seconds.')
print(time.time(), ' seconds')
Link do kodu https://github.com/Gilbert-hu/Gilbert/blob/master/ask.py