在python脚本中创建一个新的Thread,它嵌入在MFC中

时间:2015-07-31 02:07:08

标签: python c++ mfc gil

我设计了一个带有MFC和python的小工具。 在这个程序中,我使用C ++来配合python API。

我需要:

  1. C ++函数A调用Py_Initialize(),然后用Python API调用python函数B.
  2. 在python脚本中,Python函数B启动一个新的python线程E,它将创建一个新文件并对该文件进行一些输出。
  3. 然后C ++函数F调用Py_Finalize()。结束。
  4. 但事情出乎意料地发生了。 可以调用B,但E不会启动。调用F后,调用Py_Finalize(),然后E将启动并创建新文件。

    我想知道这有什么问题?似乎python被C ++阻止了。这与python GIL有关吗?如果是这样,我该怎么办?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,如果有其他人需要,我想把它粘贴在这里。

  1. 在调用Py_Initialize()之后,还需要PyEval_InitThreads()。
  2. 在A调用Python函数B之后,需要通过PyEval_ReleaseThread(PyThreadState_Get())释放GIL。然后线程E可以启动。
  3. E结束后,应该在C ++中调用PyGILState_Ensure()来取回锁。