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