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