On Nov 8, 10:52 pm, [EMAIL PROTECTED] 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 -- http://mail.python.org/mailman/listinfo/python-list