import threading
def read_file():
f = open('text.txt')
for line in f:
print line.strip() ,' : ', threading.current_thread().getName()
if __name__ == '__main__':
threads = []
for i in range(15):
t = threading.Thread(target=read_file)
threads.append(t)
t.start()
问题:每个线程是否只从上面的文件中读取每一行,或者某个给定的线程有可能最终读取一行两次?
我的理解是稍后启动的线程将覆盖先前启动的线程的文件句柄,导致早期线程最终读取几行或三次或更多次。
当我运行此代码时,结果与我预期的结果不同。
欢迎任何解释。
答案 0 :(得分:7)
每个线程独立运行您的功能;该函数的每个副本都将该文件作为本地文件打开,该文件不会被共享。每个Python文件对象完全独立地跟踪读取状态;每个都有自己的操作系统级文件句柄。
所以不,如果没有其他东西正在改变文件内容,每个线程只会看到每一行,就像单独的进程尝试读取文件一样