multiple threads with Logging: ValueError: I/O operation on closed file

scriptlearner at gmail.com scriptlearner at gmail.com
Sat Nov 8 17:52:19 EST 2008


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 line
logging.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)




More information about the Python-list mailing list