多线程文件读取 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 级文件句柄。

所以不,如果没有其他东西改变文件内容,每个线程只会看到每一行一次,就像单独的进程 试图读取文件。