Bugs item #1562822, was opened at 2006-09-21 04:59 Message generated for change (Comment added) made by josiahcarlson You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1562822&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Threads Group: None Status: Open Resolution: None Priority: 5 Submitted By: Jaster (steevel) Assigned to: Nobody/Anonymous (nobody) Summary: decimal module borks thread Initial Comment: I got across this while trying to use MySQLdb in a thread. Since MySQLdb imports decimal I got the same error there. Code: (This happens in both 2.4 and 2.5) import thread, time, sys if len(sys.argv) > 1: import threading def test (): import decimal print 'Exiting test.' thread.start_new_thread(test, ()) time.sleep(1) Output: $ ./thread.py 1 Exiting test. $ ./thread.py Exiting test. Error in atexit._run_exitfuncs: Traceback (most recent call last): File "/usr/local/python2.5/lib/python2.5/atexit.py", line 24, in _run_exitfuncs func(*targs, **kargs) File "/usr/local/python2.5/lib/python2.5/threading.py", line 656, in __exitfunc self._Thread__delete() File "/usr/local/python2.5/lib/python2.5/threading.py", line 540, in __delete del _active[_get_ident()] KeyError: -1209698640 Error in sys.exitfunc: Traceback (most recent call last): File "/usr/local/python2.5/lib/python2.5/atexit.py", line 24, in _run_exitfuncs func(*targs, **kargs) File "/usr/local/python2.5/lib/python2.5/threading.py", line 656, in __exitfunc self._Thread__delete() File "/usr/local/python2.5/lib/python2.5/threading.py", line 540, in __delete del _active[_get_ident()] KeyError: -1209698640 ---------------------------------------------------------------------- Comment By: Josiah Carlson (josiahcarlson) Date: 2006-09-22 13:25 Message: Logged In: YES user_id=341410 It's not so much that you can't import in a thread, it's that you can't import in a thread when the importer is running in another thread. When you run a module via 'python module.py', Python compiles that module into bytecode, then imports the module, which results in the module being executed. The execution of the module performs the various imports, function definitions, class definitions, etc. When you start up a thread while the module is being imported, the import lock doesn't know what to do and bails out, leaving you with the situation you are having. Try rewriting your module like: import thread import time import decimal def test(): import decimal print "exiting test" def main(): thread.start_new_thread(test, ()) time.sleep(1) Then running it via: python -c "import tmodule;tmodule.main()" And really, aside from "importing in a thread can be troublesome, if you don't know what you are doing, don't do it", what kind of documentation change would you suggest, and where would it go? ---------------------------------------------------------------------- Comment By: Jaster (steevel) Date: 2006-09-22 10:56 Message: Logged In: YES user_id=1117967 I don't get this interface. Why can't I post a comment? To josiahcarlson: The program I'm currently writing is module based and I don't know what python modules my users will import. It shouldn't matter tho, either this is a "bug" or it needs to go in the documentation that you can't import them in a thread if you havent already imported them before. ---------------------------------------------------------------------- Comment By: Josiah Carlson (josiahcarlson) Date: 2006-09-21 20:48 Message: Logged In: YES user_id=341410 I believe it is an issue with the import lock. If you 'import decimal' prior to starting up your subthread, everything will run fine. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1562822&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com