1

Python モジュールを使用して 1 つのファイルに書き込もうとして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

しかし、ファイル ハンドルを使用する代わりに、「ロックの取得と解放」ブロックの間でファイルにアクセスすると、コードはエラーなしで実行できます。ただし、すべてのスレッドがファイルを開いたり閉じたりするため、この方法は適切ではありません。

理由はありますか?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 に答える