By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,142 Members | 1,900 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,142 IT Pros & Developers. It's quick & easy.

multiple threads with Logging: ValueError: I/O operation on closedfile

P: n/a
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)

Nov 8 '08 #1
Share this Question
Share on Google+
2 Replies


P: n/a
On Nov 8, 10:52 pm, scriptlear...@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)
It would be helpful if you could post a complete script which shows
the problem. You should be doing a join for each of the threads
spawned in the main thread, as otherwise the main thread will exit
after the for loop and cause atexit processing to be done (which
causes logging handlers to be closed).

Regards,

Vinay Sajip
Nov 10 '08 #2

P: n/a
On Nov 8, 10:52 pm, scriptlear...@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
Nov 10 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.