多线程文件读取python

Ank*_*wal 0 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()
Run Code Online (Sandbox Code Playgroud)

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

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

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

欢迎任何解释.

Mar*_*ers 7

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

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

  • @abc:是的,你正在传递一个函数*object*.所以一个线程在该线程上启动并且*该函数实际上被*调用*.调用函数时,它会创建一个具有自己的本地结构的新框架.每个线程分别调用该函数,每个线程都有自己的函数框架,每个函数框架都有本地函数.那些当地人完全独立. (3认同)