你好,我有一個程序,通過查看一系列數據並發現數據中的異常。爲了使我的程序更快,我現在合併了線程(總共66個)的使用,當我的程序發現異常時我希望它將它寫入文件,但是當我嘗試從多線程寫入文件時,它不會寫入。這裏是它的一個片段線程內的Python文件處理
的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("It wont write :(")
lock.release
if __name__ == "__main__":
lock = threading.Lock()
file = open("file.txt","wb")
thread1 = myThread(lock,file)
thread1.start()
這裏是我的規模要小得多代碼 我的錯誤信息是,文件未打開撰寫
編輯:此代碼有些理由的作品,但我的全長代碼似乎不起作用,所以我打算髮布它
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
這使用我的完全相同的MyThread類只是與主要操作數據所需的參數。如果我我的代碼運行約一分鐘作爲其掃描過的DNS服務器 我應該得到保存到文件中,也許20-30 DNS服務器,但我一般得到這樣的:
FILE.TXT
2.2.1.2
8.8.8.8
31.40.40
31.31.40.40
31.31.41.41
我知道一個事實(因爲我觀察了掃描輸出),而且幾乎沒有。那麼爲什麼有些寫作和一些不是?
有了適當的縮進,此代碼爲我寫成功。 –
你知道'multiprocessing'已經在很大程度上取代了'threading',對吧? [Python:何時使用線程與多處理](http://stackoverflow.com/questions/4710433/pythonwhen-to-use-threads-vs-multiprocessing) – smci