Ritesh Raj Sarraf wrote: [...] > I noticed that even though while one thread acquires the lock, the other > threads > don't respect the lock. In fact they just go ahead and execute the statements > within the lock acquire statement. With this behavior, I'm ending up having a > partially corrupted zip archive file.
No, Carl's code was fine. I just found his explanation misleading. > def run(request, response, func=copy_first_match): > '''Get items from the request Queue, process them > with func(), put the results along with the > Thread's name into the response Queue. > > Stop running once an item is None.''' > > name = threading.currentThread().getName() > ziplock = threading.Lock() You don't want "ziplock = threading.Lock()" in the body of the function. It creates a new and different lock on every execution. Your threads are all acquiring different locks. To coordinate your threads, they need to be using the same lock. Try moving "ziplock = threading.Lock()" out of the function, so your code might read, in part: ziplock = threading.Lock() def run(request, response, func=copy_first_match): # And so on... -- --Bryan -- http://mail.python.org/mailman/listinfo/python-list