1

我正在尝试使用 Pythonthreading模块写入一个文件,并且我已经在使用锁来访问该文件。类如下:

  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

但是,如果我访问“锁定获取和释放”块之间的文件而不是使用文件句柄,则代码可以正常运行。但这种方式并不好,因为每个线程都会打开文件并关闭它。

任何解释为什么?我正在使用 Python 2.7.3 和 Windows 7。

4

2 回答 2

2

我将以下代码添加到代码末尾以等待所有子线程完成然后关闭文件。现在它可以工作了。

  while threading.activeCount() >1:
      pass
  else:
      print 'All done!'
      f.close()
于 2012-11-26T03:56:53.513 回答
-1

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

import time
time.sleep(1)

它有效。

于 2012-11-23T11:19:53.087 回答