import unittest import random import time import tempfile import os import threading DELCOUNT = 12000 LOGCOUNT = 12000 def removeloop(fname, tries): for _ in range(tries): try: os.unlink(fname) except OSError: pass stime = 0.04 * random.randint(0, 4) time.sleep(stime) class TestRaceWatchedFileHandler(unittest.TestCase): def setUp(self): self.fname = tempfile.mktemp(suffix='TestRaceWatchedFileHandler') def tearDown(self): try: os.remove(self.fname) self.fname = None except OSError: pass def test_race(self): fname = self.fname remover = threading.Thread(target=removeloop, args=[fname, DELCOUNT]) remover.daemon = True remover.start() import logging import logging.handlers logfmt = '%(asctime)s: %(levelname)s: %(message)s' loghandler = logging.handlers.WatchedFileHandler(fname) loghandler.setFormatter(logging.Formatter(logfmt)) log = logging.getLogger('test_race') log.addHandler(loghandler) log.setLevel(logging.INFO) for ii in range(LOGCOUNT): stime = 0.05 # * random.randint(0, 4) time.sleep(stime) log.warning('Foo bar %d', ii) if __name__ == '__main__': unittest.main()