FAQ
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.vanBeveren at rijnhuizen.nl

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedFeb 4, '11 at 12:39p
activeFeb 4, '11 at 12:39p
posts1
users1
websitepython.org

1 user in discussion

Vincent van Beveren: 1 post

People

Translate

site design / logo © 2022 Grokbase