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()
Question: Will each thread read each line only once from the file above or there are chances that a given thread can end up reading a line twice?
My understanding was that a thread started later will overwrite the file handle for the thread started earlier causing the earlier thread to end up reading few lines twice or thrice or more times.
When I ran this code the outcome was different from what I expected to happen.
Any explanations are welcome.
解决方案
Each thread runs your function independently; each copy of the function opens the file as a local, which is not shared. Each Python file object tracks reading state completely independently; each has their own OS-level file handle here.
So no, if nothing else is altering the file contents, each thread will see each line just once, just the same as if separate processes tried to read the file.