<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hello everybody. I am stuck with a problem:<div><br></div><div>===== begin test.py =====</div><div><div>#!/usr/bin/env python </div><div># -*- coding: utf-8 -*- </div><div>import fcntl</div><div>import multiprocessing</div><div>import unittest</div><div><br></div><div>N=10000</div><div><br></div><div>def lock(fp, mode):</div><div> fcntl.flock(fp.fileno(), mode)</div><div><br></div><div>def unlock(fp):</div><div> fcntl.flock(fp.fileno(), fcntl.LOCK_UN)</div><div><br></div><div>def read_write(args):</div><div> (filename, iterations) = args</div><div> for i in range(0, iterations):</div><div> fp = open(filename,'r')</div><div> lock(fp,fcntl.LOCK_SH) # shared lock </div><div> content = fp.read()</div><div> unlock(fp) # unlock </div><div> fp.close()</div><div> if len(content)!=N:</div><div> return False</div><div> fp = open(filename,'w')</div><div> lock(fp,fcntl.LOCK_EX) # exclusive lock </div><div> fp.write(content)</div><div> unlock(fp) # unlock </div><div> fp.close()</div><div> return True</div><div><br></div><div>class TestParallelLocks(unittest.TestCase):</div><div><br></div><div> def setUp(self):</div><div> self.filename = 'test.txt'</div><div> contents = 'x'*N</div><div> fp = open(self.filename,'w')</div><div> fp.write(contents)</div><div> fp.close()</div><div><br></div><div> def tearDown(self):</div><div> try:</div><div> os.remove(self.filename)</div><div> except:</div><div> pass</div><div><br></div><div> def test_reads_and_writes(self):</div><div> readwriters = 10</div><div> pool = multiprocessing.Pool(processes = readwriters)</div><div> results = pool.map(read_write, [[self.filename, 10]] * readwriters)</div><div> for result in results:</div><div> self.assertTrue(result)</div><div><br></div><div>if __name__ == '__main__':</div><div> unittest.main()</div><div>====== end test.py =====</div><div><br></div><div><p style="color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); position: static; z-index: auto; ">When I run it, it will often fail the test (on Leopard, Lion, Ubuntu, Python 2.5, 2.6, 2.7). <br></p><p style="color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); position: static; z-index: auto; ">Can you reproduce the problem? Do you see anything wrong with the code?</p></div><div>Massimo</div><div><br></div></div></body></html>