David M. Cotter, 26.07.2013 08:15: > in my app i initialize python on the main thread, then immediately call > PyEval_SaveThread() because i do no further python stuff on the main thread. > > then, for each script i want to run, i use boost::threads to create a new > thread, then on that thread i "ensure" the GIL, do my stuff, then release it. > > so, to test concurrency, on my first background thread, i do an infinite loop > that just logs "i'm alive", then calls sleep(0.25) > > so that thread continues to run forever (with it's GIL ensured) > > according to the doc: "In order to emulate concurrency of execution, the > interpreter regularly tries to switch threads" > > so i figure i can run another thread that does a single print statement: > >> ensure gil >> print my thing >> release gil > > and this DOES run. however, after releasing it's gil, i guess the interpeter > gets back to the first back thread, but then has this error immediately: > > 9: Traceback (most recent call last): > 9: File "<string>", line 70, in ? > 9: File "<string>", line 55, in main > 9: AttributeError: 'builtin_function_or_method' object has no attribute > 'sleep' > > suddenly the sleep module has been unloaded?? huh? i thought the thread > state had been preserved?
You didn't show your code, but as a wild guess, maybe you did from time import time instead of import time somewhere? If not, please provide the exact example code that you are running. Stefan -- http://mail.python.org/mailman/listinfo/python-list