multiple threads with Logging: ValueError: I/O operation on closed file
Vinay Sajip
vinay_sajip at yahoo.co.uk
Mon Nov 10 04:31:29 EST 2008
On Nov 8, 10:52 pm, scriptlear... at gmail.com wrote:
> OS: Solaris 9
> Python Version: 2.4.4
>
> I need to log certain data in a worker thread; however, I am getting
> an error now when I use two worker threads.
> I think the problem comes from the linelogging.info('Thread Object (%d):(%d), Time:%s in seconds %d'%
> (self.no,self.duration,time.ctime(),time.time()))
> when multiple worker thread is trying to update the log files.
> What did I do wrong? Should I lock the log file before writing to
> it? Thanks.
>
> Traceback (most recent call last):
> File "/tools/python-2_4_4.i386.solaris.5_9/lib/python2.4/logging/
> __init__.py", line 737, in emit
> self.stream.write(fs % msg)
> ValueError: I/O operation on closed file
> Traceback (most recent call last):
> File "/tools/python-2_4_4.i386.solaris.5_9/lib/python2.4/logging/
> __init__.py", line 737, in emit
> self.stream.write(fs % msg)
> ValueError: I/O operation on closed file
>
> class Worker(threading.Thread):
> def __init__(self,no,duration):
> threading.Thread.__init__(self)
> self.no = no
> self.duration = duration
>
> def run(self):
> end = time.time() + self.duration
>
> while(end > time.time()):
> logging.info('Thread Object (%d):(%d), Time:%s in seconds
> %d'%(self.no,self.duration,time.ctime(),time.time()))
> time.sleep(10)
>
> def main():
> children = []
> logging.basicConfig(level=logging.INFO,
> format='%(asctime)s %(levelname)s %
> (message)s',
> filename='logs/myapp.log',
> filemode='w')
> args = parseArgs()
>
> for i in range(args.threads):
> logging.info('i=%d'%(i))
> children.append(Worker(i,args.duration))
> children[i].start()
> time.sleep(0.1)
Take a look at this example test script to see how to use logging in a
multi-threaded environment:
http://dpaste.com/hold/89734/
Regards,
Vinay Sajip
More information about the Python-list
mailing list