There are three python programs, writer program (writer.py) writes in to the file output.txt and two reader programs (reader_1.py, reader_2.py) read from the same output.txt file at a same time.
What is the best way to achieve the synchronization between these three programs? How to avoid reading by the reader program, if the other program is writing in to the output file? How to handle single writer and multiple readers problem efficiently in python?
I tried to implement the fnctl locking mechanism, but this module is not found in my python.
writer.py
#!/usr/bin/python
import subprocess
import time
cycle = 10
cmd="ls -lrt"
def poll():
   with open("/home/output.txt", 'a') as fobj:
      fobj.seek(0)
      fobj.truncate()
      try:
          subprocess.Popen(cmd,  shell=True,  stdout=fobj)
      except Exception:
          print "Exception Occured"
# Poll the  Data
def do_poll():
    count = int(time.time())
    while True:
        looptime = int(time.time())
        if (looptime - count) >= cycle:
             count = int(time.time())
             print('Begin polling cycle')
             poll()
             print('End polling cycle')
def main():
    do_poll()
if __name__ == "__main__":
    main()
reader_1.py
#!/usr/bin/python
with open("/home/output10.txt", 'r') as fobj:
   f=fobj.read()
print f
reader_2.py
#!/usr/bin/python
with open("/home/output10.txt", 'r') as fobj:
   f=fobj.read()
print f
Note: reader_1.py and reader_2.py runs continuously in while loop. Due to this reason same file being accessed by three programs at same time.
Looking for ideas.
Solution #1: Added fnctl locking mechanism to writer.py program. But not sure this is efficiently locking the file.
#!/usr/bin/python
import subprocess
import time
import os
import fcntl, os
report_cycle = 2
cmd='ls -lrt'
def poll(devnull):
   with open("/home/output10.txt", 'a') as fobj:
      try:
         fcntl.flock(fobj, fcntl.LOCK_EX | fcntl.LOCK_NB)
      except IOError:
          print "flock() failed to hold an exclusive lock."
      fobj.seek(0)
      fobj.truncate()
      try:
         subprocess.call(cmd, shell=True,  stdout=fobj, stderr=devnull)
      except Exception:
          print "Exception Occured"
      # Unlock file
      try:
           fcntl.flock(fobj, fcntl.LOCK_UN)
      except:
            print "flock() failed to unlock file."
