Hallo, ich habe ein Programm, das einen Datenbereich durchsucht und Anomalien in diesen Daten findet. Um mein Programm schneller zu machen, habe ich die Verwendung von Threads (insgesamt 66) integriert. Jetzt, wenn mein Programm die Anomalien findet, möchte ich, dass es sie in eine Datei schreibt. Wenn ich jedoch aus mehreren Threads in die Datei schreiben möchte, funktioniert es nicht. Hier ist ein Ausschnitt davon
Python:
import threading
class myThread(threading.Thread):
def __init__(self,lock,output):
threading.Thread.__init__(self)
self.lock = lock
self.file = output
def run(self):
main(self.lock,self.file)
def main(lock,file):
lock.acquire()
file.write("Es wird nicht geschrieben :(")
lock.release
if __name__ == "__main__":
lock = threading.Lock()
file = open("file.txt","wb")
thread1 = myThread(lock,file)
thread1.start()
hier ist mein Code auf einer viel kleineren Skala. Meine Fehlermeldung besagt, dass die Datei nicht zum Schreiben geöffnet ist
EDIT: aus irgendeinem Grund funktioniert dieser Code, aber mein vollständiger Code scheint nicht zu funktionieren, also werde ich ihn posten
def main(START_IP,END_IP,lock,File):
# speichere gefundene DNS-Server
foundDNS=[]
# durchsuche alle IP-Adressen im Bereich
for i0 in range(START_IP[0], END_IP[0]+1):
for i1 in range(START_IP[1], END_IP[1]+1):
for i2 in range(START_IP[2], END_IP[2]+1):
for i3 in range(START_IP[3], END_IP[3]+1):
# baue IP-Adresse auf
ipaddr=str(i0)+"."+str(i1)+"."+str(i2)+"."+str(i3)
print "Scan "+ipaddr+"...",
# scanne Adresse
ret=ScanDNS(ipaddr, 10)
if ret==True:
foundDNS.append(ipaddr)
print "Gefunden!"
lock.acquire()
File.write(ipaddr)
File.write("\n")
File.flush()
lock.release()
else:
print
Dies verwendet genau dieselbe MyThread-Klasse, jedoch mit den erforderlichen Argumenten für main, um die Daten zu manipulieren. Wenn ich meinen Code für etwa eine Minute ausführe, während er über DNS-Server scannt, sollten vielleicht 20-30 DNS-Server in eine Datei gespeichert werden, aber normalerweise erhalte ich dies:
FILE.TXT
2.2.1.2
8.8.8.8
31.40.40
31.31.40.40
31.31.41.41
Ich weiß mit Sicherheit (weil ich die Scan-Ausgabe beobachtet habe), dass dies kaum alle davon sind. Warum wird teilweise geschrieben und teilweise nicht?