使用带有线程锁定的文件句柄时,Python错误“关闭文件上的I / O操作”

时间:2012-11-23 09:06:57

标签: python multithreading file io

我正在尝试使用Python threading模块写入一个文件,我已经使用锁来访问该文件。如下所示的课程:

  class WriteToFile(threading.Thread):
      def __init__(self,lock,fp):
          threading.Thread.__init__(self)
          self.lock=lock
          self.fp=fp
      def run():
          self.lock.acquire()
          self.fp.write('some string')
          self.lock.release()
  f=open('somefile','a')
  lock=threading.Lock()
  thread= WriteToFile(lock,f)
  thread.start()

上面的代码只能继续运行一段时间,并由于ValueError: I/O operation on closed file

而停止运行

但是如果我在'lock acquire and release'块之间访问文件而不是使用文件句柄,代码可以正常运行。但是这种方式并不好,因为每个线程都会打开文件并关闭它。

任何解释原因?我使用的是Python 2.7.3和Windows 7。

2 个答案:

答案 0 :(得分:2)

我将下面的代码添加到代码的末尾,等待所有子线程完成然后关闭文件。现在它有效。

  while threading.activeCount() >1:
      pass
  else:
      print 'All done!'
      f.close()

答案 1 :(得分:-2)

write被调用之前,主线程可能已经死了吗?我已经在脚本结尾添加了这个代码来尝试你的代码:

import time
time.sleep(1)

它有效。