Hi everyone, I'm currently working on a multithreaded GUI system in Python 2.6. In this system I use conditions to coordinate synchronization. However, one condition suddenly locks, without any cause. As a last resort I have written a small routine to dump all the stack traces.
def dumpAllStacks(self): for threadId, stack in sys._current_frames().items(): print "Thread with Id: %s" % threadId traceback.print_stack(stack) When the system is dead-locked, I invoke this method. One stack-trace strikes me as odd: Thread with Id: 1568 File "c:\PYTHON26\lib\threading.py", line 497, in __bootstrap self.__bootstrap_inner() File "c:\PYTHON26\lib\threading.py", line 525, in __bootstrap_inner self.run() File "c:\PYTHON26\lib\threading.py", line 477, in run self.__target(*self.__args, **self.__kwargs) File "c:\PYTHON26\lib\site-packages\magnum\gui\autogui.py", line 2558, in __sendDataLoop self.__sendDataCondition.wait(1) File "c:\PYTHON26\lib\threading.py", line 256, in wait _sleep(delay) File "c:\PYTHON26\lib\threading.py", line 497, in __bootstrap self.__bootstrap_inner() <<===== What? File "c:\PYTHON26\lib\threading.py", line 525, in __bootstrap_inner self.run() File "c:\PYTHON26\lib\site-packages\magnum\subsys\__init__.py", line 2242, in run self.updateTask() File "c:\PYTHON26\lib\site-packages\magnum\subsys\__init__.py", line 2214, in updateTask self.statusServerModule.updateTaskWithConnection(self.statusServerConnection) File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\modules.py", line 2450, in updateTaskWithConnection self.updateDataWithConnection(connection, updateAll) File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\modules.py", line 2488, in updateDataWithConnection self.updateVariableData(varDataDict, frozenset(varDataDict)) File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\modules.py", line 796, in updateVariableData self.cmdMgr.updateVariableData(self.moduleId, varDataDict, forceVarIdSet) # after this varMgr makes deepcopy File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\managers.py", line 441, in updateVariableData self.notifyUpdateReport(updatedData) File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\managers.py", line 493, in notifyUpdateReport with self.updateReportCondition: File "c:\PYTHON26\lib\threading.py", line 205, in __enter__ return self.__lock.__enter__() File "c:\PYTHON26\lib\threading.py", line 121, in acquire rc = self.__block.acquire(blocking) Can someone tell me how the sleep of one thread can continue as the 'run' of another? Is this normal? Thanks in advance! Regards, Vincent van Beveren ___ Ing. V. van Beveren Software Engineer, FOM Rijnhuizen T: +31 (0) 30-6096769 E: v.vanbeve...@rijnhuizen.nl -- http://mail.python.org/mailman/listinfo/python-list