gpt4 book ai didi

线程内的 Python 文件处理

转载 作者:行者123 更新时间:2023-11-28 16:42:10 25 4
gpt4 key购买 nike

您好,我有一个程序可以查看一系列数据并发现该数据中的异常情况。为了使我的程序更快,我现在合并了线程(总共 66 个)的使用,当我的程序发现异常时,我希望它把它写入一个文件,但是当我尝试从多个线程中写入文件时,它不会写入.这是它的一部分

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

这使用与 main 操作数据所需的参数完全相同的 MyThread 类。如果我在扫描 DNS 服务器时运行我的代码大约一分钟我应该将 20-30 个 DNS 服务器保存到一个文件中,但我通常会这样:

文件.TXT

   2.2.1.2
8.8.8.8
31.40.40
31.31.40.40
31.31.41.41

我知道一个事实(因为我看过扫描输出)而且几乎不是所有这些。那为什么有的写有的不写呢?

最佳答案

这可能是一个错字,但是:

lock.release

应该有括号:

lock.release()

此外,您的写入将被缓冲到第一个换行符或 flush()

关于线程内的 Python 文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18000422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com