我有一个python脚本运行一个特定的脚本大量的次数(蒙特卡洛目的),我已经脚本的方式是,我排队脚本所需的次数,它应该运行,然后我产生线程并且每个线程在完成时一次又一次地运行脚本。Python 2.5中的线程问题,KeyError:51,帮助调试?
一旦特定线程中的脚本完成后,通过访问一个锁将输出写入文件(所以我猜测只有一个线程在给定时间访问锁)。一旦锁由一个线程释放,下一个线程访问它并将其输出添加到先前写入的文件并重写它。
我没有面临一个问题,当迭代次数是像10或20小,但是当它像50或150大,python返回一个KeyError:51告诉我元素不存在,并指出错误是在我困惑的锁,因为只有一个线程应该立即访问锁,我不希望有错误。
这是我使用的类:
class errorclass(threading.Thread):
def __init__(self, queue):
self.__queue=queue
threading.Thread.__init__(self)
def run(self):
while 1:
item = self.__queue.get()
if item is None: break
result = myfunction()
lock = threading.RLock()
lock.acquire()
ADD entries from current thread to entries in file and
REWRITE FILE
lock.release()
queue = Queue.Queue()
for i in range(threads):
errorclass(queue).start()
for i in range(desired iterations):
queue.put(i)
for i in range(threads):
queue.put(None)
Python和KeyError异常返回:51后锁访问添加/写文件操作过程中大量需要的迭代,我想知道如果这是正确的方式使用锁定,因为每个线程都有锁定操作,而不是每个线程访问共享锁定?怎样才能纠正这个问题呢?