こんにちは、さまざまなデータを調べて、そのデータの異常を見つけるプログラムがあります。プログラムを高速化するために、スレッド (合計 66) の使用を組み込みました。プログラムが異常を見つけたときに、それをファイルに書き込みたいのですが、複数のスレッド内からファイルに書き込もうとすると、書き込みません。 .
class myThread(threading.Thread):
def __init__(self,arg1,arg2,lock,output):
threading.Thread.__init__(self)
self.arg1 = arg1
self.arg2 = arg2
self.lock = lock
self.file = output
def run(self):
# print "Starting " + self.name
main(self.arg1,self.arg2,self.lock,self.file)
# print "Exiting " + self.name
def main(START_IP,END_IP,lock,File):
# store found DNS servers
foundDNS=[]
# scan all the ip addresses in the range
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):
# build ip addres
ipaddr=str(i0)+"."+str(i1)+"."+str(i2)+"."+str(i3)
print "Scanning "+ipaddr+"...",
# scan address
ret=ScanDNS(ipaddr, 10)
if ret==True:
foundDNS.append(ipaddr)
print "Found!"
lock.acquire()
File.write(ipaddr)
File.write("\n")
File.flush()
lock.release()
else:
print
file = open("file.txt","wb")
lock = threading.Lock()
thread1 = myThread(START_IP,END_IP,lock,)
thread1.start()
これは、データを操作するための main に必要な引数だけを使用して、まったく同じ MyThread クラスを使用します。DNSサーバーをスキャンするコードを約1分間実行すると、おそらく20〜30のDNSサーバーがファイルに保存されるはずですが、通常は次のようになります。
ファイル.TXT
2.2.1.2
8.8.8.8
31.40.40
31.31.40.40
31.31.41.41
私は(スキャン出力を見たので)事実を知っており、それらすべてをほとんど書き込んでいないことを知っています。では、なぜ書き込みがあるものとないものがあるのでしょうか?