导入使用OpenMP的python扩展后显示PyQt4窗口时崩溃
我正在开发一个python应用程序,它使用我自己开发的C扩展模块。扩展模块执行一些繁重的数字运算,并使用OpenMP。导入使用OpenMP的python扩展后显示PyQt4窗口时崩溃,python,qt,pyqt,openmp,python-c-extension,Python,Qt,Pyqt,Openmp,Python C Extension,我正在开发一个python应用程序,它使用我自己开发的C扩展模块。扩展模块执行一些繁重的数字运算,并使用OpenMP。 我最近使用PyQt4向Python应用程序添加了一些GUI组件。但是,当我显示窗口时,应用程序在窗口完全绘制之前崩溃(窗口很快就会显示)。我能够找到问题的根源:当我在没有OpenMP支持的情况下编译数字处理C扩展时,窗口显示良好,一切正常。我想这与OpenMP和Qt之间的线程有关。有人做过类似的观察吗 作为一种解决方法,您可以使用openmp和Qt前端程序创建一个独立程序。并让
我最近使用PyQt4向Python应用程序添加了一些GUI组件。但是,当我显示窗口时,应用程序在窗口完全绘制之前崩溃(窗口很快就会显示)。我能够找到问题的根源:当我在没有OpenMP支持的情况下编译数字处理C扩展时,窗口显示良好,一切正常。我想这与OpenMP和Qt之间的线程有关。有人做过类似的观察吗 作为一种解决方法,您可以使用openmp和Qt前端程序创建一个独立程序。并让他们使用tcp套接字或您熟悉的东西进行通信(dll是另一个选项?) 关键是,隔离不同的模块,如果一个模块出现故障,您知道哪个部分出现故障。 作为一个完整的大程序,很难找到一个野生指针…可能是PyQT中的某些内容是线程不安全的 例如,您可以尝试使用inproc或ipc
#pragma omp single
或#pragma omp master
来更新此类内容来自QT的线程和来自OpenMP的线程是完全不同的线程,因此这不会带来任何问题。好的建议,但这不是一个选项问题是,我甚至没有在我的C扩展和PyQT应用程序中调用任何东西。因此,我认为没有任何比赛条件。当我调用QApplication的exec方法而之前没有调用任何C代码时,我的应用程序就崩溃了。