I have 2 threads in C code using python 2.5.2. First thread creates new interpreter (i need several interpreters but those 2 threads use only one) like that:
PyEval_AcquireLock(); threadState = Py_NewInterpreter(); PyThreadState_Swap(threadState); // calling python API PyThreadState_Swap(NULL); PyEval_ReleaseLock(); Second thread uses interpreter created in first thread: PyEval_AcquireLock(); PyThreadState_Swap(threadState); and sometimes PyThreadState_Swap crashes in debug build (PyGILState_GetThisThreadState() returns garbage). In release build that code doesn't run and so far no other problem was found. I call PyEval_InitThreads() at the begining of program and every PyEval_AcquireLock() has PyEval_ReleaseLock(). Am I allowed to use the same threadState in different threads? If I am, is there another problem in my code? Or maybe it's a bug in python - acording to documentation "Python still supports the creation of additional interpreters (using Py_NewInterpreter()), but mixing multiple interpreters and the PyGILState_*() API is unsupported." - I don't use PyGILState_ but it's used internally in PyThreadState_Swap(). I also don't use PyEval_RestoreThread() - comment sugests that crashing code is present because possibility of calling from PyEval_RestoreThread(). -- http://mail.python.org/mailman/listinfo/python-list