Invalid thread state for this thread

Martin Evans martin at browns-nospam.co.uk
Fri May 25 05:21:16 EDT 2007


Just in case anyone else has seen this problem, after upgrading to 2.4.4 the 
problem appears to have resolved itself.

>I know this has been seen before but it is not making too much sense (after 
>reading many posts). It all appears to work fine but then dies after about 
>40 invocations.
>
> My app has Python embedded, it is embedded as part of a dll which 
> initializes python and finalizes on load and unload (see below). When a 
> script needs to be run, I create a new thread, let the script complete and 
> close the thread.
>
> The thread contains the following type arrangement:
>
> PythonThread()
> {
>  hScriptFile = OpenScriptFile(m_szActiveScript);
>  PyEval_AcquireLock();
>  pInterpreter = Py_NewInterpreter();
>  Py_SetProgramName(szModuleFileName);
>  PyRun_SimpleFile(hScriptFile,m_szActiveScript);
>  PyErr_Clear();
>  Py_EndInterpreter(pInterpreter);
>  PyEval_ReleaseLock();
> }
>
> This appears to work fine accept that after around 30-40 invocations I 
> always get the "Invalid thread state for this thread". ie the app and dll 
> stay loaded and I click my "run" button manually about 40 times. In this 
> test it is a simple "hello world" type script. The size of the script does 
> not appear to matter.
>
> The dll is coded something like this:
>
> DllLoad()
> {
>  Py_Initialize();
>  PyEval_InitThreads();
>  m_mainThreadState = PyThreadState_Get();
>  PyEval_ReleaseLock();
> }
>
> DllUnload()     (not called as part of this test)
> {
>  PyEval_AcquireLock();
>  PyThreadState_Swap(m_mainThreadState);
>  Py_Finalize();
> }
>
> The app has been designed to allow a second interpreter to run 
> independently (thus the need for multiple thread support) and this also 
> appears to work fine, but for this test only this one thread was used. I 
> have a compiled version of 2.4.2.
>
> Any ideas would be appreciated.
>
> Martin 





More information about the Python-list mailing list