我有一個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後鎖訪問添加/寫文件操作過程中大量需要的迭代,我想知道如果這是正確的方式使用鎖定,因爲每個線程都有鎖定操作,而不是每個線程訪問共享鎖定?怎樣才能糾正這個問題呢?