全部文本 #18950 原始 编辑

Anonymous

公开 text v1 · 不可变
·已发布 2005-07-31 19:53 UTC
渲染后的文本正文
static PyObject *foo(PyObject *self, PyObject* args)
{
 Py_BEGIN_ALLOW_THREADS
 // do python internel stuff
 Py_END_ALLOW_THREADS

 return PyInt_FromLong(99L);
}

int main(int argc, char **argv)
{
 // initializes python and modules
 InitPython();

 PyThreadState * mainThreadState = PyEval_SaveThread();
 // release the lock
	PyEval_ReleaseLock();

	// get the global lock
	PyEval_AcquireLock();
	// get a reference to the PyInterpreterState
	PyInterpreterState * mainInterpreterState = mainThreadState->interp;
	// create a thread state object for this thread
	PyThreadState * myThreadState = PyThreadState_New(mainInterpreterState);
	// free the lock
	PyEval_ReleaseLock();

	// grab the global interpreter lock
	PyEval_AcquireLock();
	// swap in my thread state
	//PyThreadState_Swap(myThreadState);
	// execute some python code
	// start threaded python code
	// ...
	// clear the thread state
	//PyThreadState_Swap(NULL);
	// release our hold on the global interpreter
	PyEval_ReleaseLock();

 // grab the lock
 PyEval_AcquireLock();
 // swap my thread state out of the interpreter
 PyThreadState_Swap(NULL);
 // clear out any cruft from thread state object
 PyThreadState_Clear(myThreadState);
 // delete my thread state object
 PyThreadState_Delete(myThreadState);
 // release the lock
 PyEval_ReleaseLock();

 PyEval_AcquireLock();
 PyThreadState_Swap(myThreadState);
	Py_Finalize();
}