This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Threading and KeyError: 51
Type: Stage:
Components: IDLE Versions: Python 2.5
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Mattias.Nilsson, Vignesh.K, draghuram
Priority: normal Keywords:

Created on 2010-05-18 14:56 by Vignesh.K, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (3)
msg105981 - (view) Author: Vignesh (Vignesh.K) Date: 2010-05-18 14:56
I have a python script which runs a particular script large number of times (for monte carlo purpose) and the way I have scripted it is that, I queue up the script the desired number of times it should be run then I spawn threads and each thread runs the script once and again when its done.

Once the script in a particular thread is finished, the output is written to a file by accessing a lock (so my guess was that only one thread accesses the lock at a given time). Once the lock is released by one thread, the next thread accesses it and adds its output to the previously written file and rewrites it. 

I am not facing a problem when the number of iterations is small like 10 or 20 but when its large like 50 or 150, python returns a KeyError: 51 telling me element doesn't exist and the error it points out to is within the lock which puzzles me since only one thread should access the lock at once and I do not expect an error. 

This is the class I use:

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()
msg105985 - (view) Author: Mattias Nilsson (Mattias.Nilsson) Date: 2010-05-18 15:41
Correct me if I'm wrong, but you seem to be creating a new lock object for each iteration in the loop?
If other threads should be blocked, they must be using the same lock object and you can't create new ones for each time you want to write something to the file.

This doesn't seem to be a Python bug at all, but instead a problem in your implementation. It might be better to post this at stackoverflow.com or somewhere similar.
msg105986 - (view) Author: Raghuram Devarakonda (draghuram) (Python triager) Date: 2010-05-18 15:45
As suggested, please post in c.l.py or other forums. Open a bug here only if you are sure that there is a bug in Python.
History
Date User Action Args
2022-04-11 14:57:01adminsetgithub: 52997
2010-05-18 15:45:31draghuramsetstatus: open -> closed

nosy: + draghuram
messages: + msg105986

resolution: not a bug
2010-05-18 15:41:32Mattias.Nilssonsetnosy: + Mattias.Nilsson
messages: + msg105985
2010-05-18 14:56:47Vignesh.Kcreate