【问题标题】:Multithreaded file read python多线程文件读取python
【发布时间】:2016-10-06 22:09:17
【问题描述】:
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 multithreading python-multithreading


【解决方案1】:

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

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

【讨论】:

  • 但是为什么每个线程都独立运行函数呢?它是传递给每个线程的同一个函数对象。那么每个线程如何才能将文件作为本地打开呢?
  • @abc:是的,你传入了一个函数object。因此启动了一个线程并且在该线程上该函数实际上被调用。当一个函数被调用时,它会创建一个具有自己本地结构的新框架。每个线程单独调用函数,每个线程都有自己的函数框架,每个函数框架都有局部变量。那些当地人是完全独立的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多