多线程文件读取python

时间:2016-10-06 22:09:17

标签: python multithreading python-multithreading

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()

问题:每个线程是否只从上面的文件中读取每一行,或者某个给定的线程有可能最终读取一行两次?

我的理解是稍后启动的线程将覆盖先前启动的线程的文件句柄,导致早期线程最终读取几行或三次或更多次。

当我运行此代码时,结果与我预期的结果不同。

欢迎任何解释。

1 个答案:

答案 0 :(得分:7)

每个线程独立运行您的功能;该函数的每个副本都将该文件作为本地文件打开,该文件不会被共享。每个Python文件对象完全独立地跟踪读取状态;每个都有自己的操作系统级文件句柄。

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