多线程文件读取 python
Multithreaded file read python
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()
问题:每个线程是否只从上面的文件中读取每一行一次,或者给定线程有可能最终读取一行两次?
我的理解是,稍后启动的线程将覆盖较早启动的线程的文件句柄,导致较早的线程最终读取几行两次或三次或更多次。
当我 运行 此代码时,结果与我预期的不同。
欢迎任何解释。
每个线程独立运行你的函数;该函数的每个副本都将文件作为本地文件打开,不共享。每个 Python 文件对象完全独立地跟踪阅读状态;每个都有自己的 OS 级文件句柄。
所以不,如果没有其他东西改变文件内容,每个线程只会看到每一行一次,就像单独的进程 试图读取文件。
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()
问题:每个线程是否只从上面的文件中读取每一行一次,或者给定线程有可能最终读取一行两次?
我的理解是,稍后启动的线程将覆盖较早启动的线程的文件句柄,导致较早的线程最终读取几行两次或三次或更多次。
当我 运行 此代码时,结果与我预期的不同。
欢迎任何解释。
每个线程独立运行你的函数;该函数的每个副本都将文件作为本地文件打开,不共享。每个 Python 文件对象完全独立地跟踪阅读状态;每个都有自己的 OS 级文件句柄。
所以不,如果没有其他东西改变文件内容,每个线程只会看到每一行一次,就像单独的进程 试图读取文件。