Multithreaded file read python
<pre><code>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()
</code></pre>

<p>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?</p>

<p>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. </p>

<p>When I ran this code the outcome was different from what I expected to happen.</p>

<p>Any explanations are welcome.</p>

<p>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.</p>

<p>So no, if <em>nothing else is altering the file contents</em>, each thread will see each line just once, just the same as if separate <em>processes</em> tried to read the file.</p>

python multithreading python-multithreading