Differences between revisions 9 and 10
Revision 9 as of 2011-03-24 22:17:36
Size: 3737
Editor: PaulBoddie
Comment: Added some advice.
Revision 10 as of 2011-03-31 17:45:52
Size: 5177
Editor: 12
Comment:
Deletions are marked like this. Additions are marked like this.
Line 42: Line 42:

= AskingForHelpAnswered This patch seems to work for me. I will also post to the bugs list.
--- threading27.py Mon Apr 05 20:23:34 2010
+++ threadingmod27.py Tue Mar 29 10:16:59 2011
@@ -439,6 +439,7 @@
         self.__stopped = False
         self.__block = Condition(Lock())
         self.__initialized = True
+ self.isSelfInLimbo = True
         # sys.stderr is not stored in the class like
         # sys.exc_info since it can be changed between instances
         self.__stderr = _sys.stderr
@@ -484,7 +485,9 @@
         finally:
             # Avoid a refcycle if the thread is running a function with
             # an argument that has a member that points to the thread.
- del self.__target, self.__args, self.__kwargs
+ if not self.isSelfInLimbo:
+ self.isSelfInLimbo = True
+ del self.__target, self.__args, self.__kwargs
 
     def __bootstrap(self):
         # Wrapper around the real bootstrap code that ignores
@@ -515,7 +518,10 @@
             self.__started.set()
             with _active_limbo_lock:
                 _active[self.__ident] = self
- del _limbo[self]
+ if self in _limbo:
+ del _limbo[self]
+ else:
+ self.isSelfInLimbo = False
             if __debug__:
                 self._note("%s.__bootstrap(): thread started", self)
 

Asking for Help: I'm taking an unhandled threading exception that I've been unable to locate

I keep getting this unhandled exception, but I believe I have placed try except statements in all my threads. Any thoughts?

Unhandled exception in thread started by <bound method Thread.__bootstrap of <Thread(Thread-169204, stopped 1004)>>
Traceback (most recent call last):
  File "C:\Python27\lib\threading.py", line 503, in __bootstrap
    self.__bootstrap_inner()
  File "C:\Python27\lib\threading.py", line 518, in __bootstrap_inner
    del _limbo[self]
KeyError: <Thread(Thread-169204, stopped 1004)>

A philosophical discussion appears to be appropriate here. How in fact does one get one's self out of _limbo? The answer my friend is blowing in the wind. The answer is ...

Posted this question about a week ago and noone has answered. Not sure if anyone is paying attention to the Asking for Help portion of the wiki. Just to make sure that I know exactly how long its been on the wiki today's date is 3/22/2011. The wiki indicated that my question was sent to MatsWichmann, SkipMontanaro, FredDrake. Do these guys really exist?

Yes, I really exist. So do Fred and Mats. (I have even met Fred before.) I subscribe to all pages of the wiki mostly to revert spam introduced into it, not to answer questions. Personally, of all the uses one could think of for a wiki, asking and answering long-form help questions seems to me like just about the worst use possible. I ignore essentially all questions posted here unless it looks like someone is spamming this subtree of the wiki. -- SkipMontanaro

Those guys get mails about updates to this page, yes. I did have a look at the threading module, but I have to admit that I am not really familiar with its architecture. There's a comment in the __bootstrap method which claims that exceptions thrown by "daemon threads" are meant to be ignored, but it looks like you're experiencing a problem with the actual administration of threads done by the module itself - that is, you aren't supposed to be concerned by the _limbo dictionary - and maybe there's a bug involved. I can only find 7264 which mentions _limbo, however. -- PaulBoddie 2011-03-22 22:55:34

Skip and Paul,

Thanks for responding. Is there a better place to post my question? Where might that be?

Check out the links at the top of the Asking for Help page. I think it's helpful to have some kind of archive of questions and answers here, although I didn't start this activity, but unfortunately there aren't many people reading the questions, I'm afraid. I would try the regular Python mailing list, maybe filing a bug if this is in some program where you're doing the right thing. You may have to share a bit of your code to have people help you, however. People really like to have the essence of a problem demonstrated in as short a program as possible. Feel free to use this page to communicate your problem if it's convenient, though, if you need to post some code somewhere and you don't think your e-mail program or newsreader is keeping it readable, for example. -- PaulBoddie 2011-03-24 22:17:33

When answering questions, add the CategoryAskingForHelpAnswered category when saving the page. This will move the link to this page from the questions section to the answers section on the Asking for Help page.


CategoryAskingForHelp

= AskingForHelpAnswered This patch seems to work for me. I will also post to the bugs list. --- threading27.py Mon Apr 05 20:23:34 2010 +++ threadingmod27.py Tue Mar 29 10:16:59 2011 @@ -439,6 +439,7 @@

  • self.stopped = False self.block = Condition(Lock()) self.initialized = True

+ self.isSelfInLimbo = True

  • # sys.stderr is not stored in the class like # sys.exc_info since it can be changed between instances

    self.stderr = _sys.stderr

@@ -484,7 +485,9 @@

  • finally:
    • # Avoid a refcycle if the thread is running a function with # an argument that has a member that points to the thread.

- del self.target, self.args, self.kwargs + if not self.isSelfInLimbo: + self.isSelfInLimbo = True + del self.target, self.args, self.kwargs

  • def bootstrap(self):

    • # Wrapper around the real bootstrap code that ignores

@@ -515,7 +518,10 @@

  • self.started.set() with _active_limbo_lock:

    • _active[self.ident] = self

- del _limbo[self] + if self in _limbo: + del _limbo[self] + else: + self.isSelfInLimbo = False

  • if debug:

    • self._note("%s.bootstrap(): thread started", self)

Asking for Help/I'm taking an unhandled threading exception that I've been unable to locate (last edited 2011-03-31 20:02:24 by PaulBoddie)

Unable to edit the page? See the FrontPage for instructions.