I believe we have a problem with file locking. I managed to isolate the problem in this non-web2py pure-python program:
==== begin file test.py ====== import fcntl import multiprocessing import unittest N=10000 def lock(fp, mode): fcntl.flock(fp.fileno(), mode) def unlock(fp): fcntl.flock(fp.fileno(), fcntl.LOCK_UN) def read_write(args): (filename, iterations) = args for i in range(0, iterations): fp = open(filename,'r') lock(fp,fcntl.LOCK_SH) # shared lock content = fp.read() unlock(fp) # unlock fp.close() if len(content)!=N: return False fp = open(filename,'w') lock(fp,fcntl.LOCK_EX) # exclusive lock fp.write(content) unlock(fp) # unlock fp.close() return True class TestParallelLocks(unittest.TestCase): def setUp(self): self.filename = 'test.txt' contents = 'x'*N fp = open(self.filename,'w') fp.write(contents) fp.close() def tearDown(self): try: os.remove(self.filename) except: pass def test_reads_and_writes(self): readwriters = 10 pool = multiprocessing.Pool(processes = readwriters) results = pool.map(read_write, [[self.filename, 10]] * readwriters) for result in results: self.assertTrue(result) if __name__ == '__main__': unittest.main() ===== end file test.py ==== If I run it with python test.py it will often fail the test (tested on Mac Leopard, Lion, Ubuntu, Python 2.5, 2.6, 2.7). HELP! Can you reproduce the problem? Do you see anything wrong with the code? Massimo