我正在尝试使用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。
答案 0 :(得分:2)
我将下面的代码添加到代码的末尾,等待所有子线程完成然后关闭文件。现在它有效。
while threading.activeCount() >1:
pass
else:
print 'All done!'
f.close()
答案 1 :(得分:-2)
在write
被调用之前,主线程可能已经死了吗?我已经在脚本结尾添加了这个代码来尝试你的代码:
import time
time.sleep(1)
它有效。