我正在开发一个使用我自己开发的 C 扩展模块的 python 应用程序。扩展模块执行一些繁重的数字运算并使用 OpenMP。我最近使用 PyQt4 向我的 Python 应用程序添加了一些 GUI 组件。但是,当我显示一个窗口时,应用程序在窗口完全绘制之前崩溃(窗口很快就会显示出来)。我能够找到问题所在:当我在没有 OpenMP 支持的情况下编译我的数字运算 C 扩展时,窗口显示正常并且一切正常。我想这与 OpenMP 和 Qt 之间的线程有关。有没有人做过类似的观察?
问问题
243 次
3 回答
1
作为一种解决方法,您可以使用 openmp 创建一个独立程序和一个 Qt 前端程序。并使用 tcp 套接字或您熟悉的东西使它们进行通信(dll 是另一种选择?)。
关键是,隔离不同的模块,如果一个模块发生故障,您就知道哪一部分发生故障。作为一个完整的大程序,很难找到一个野指针......
于 2011-09-16T07:58:18.710 回答
1
PyQT中的某些东西可能是线程不安全的。
例如,您可以尝试将zeromq与inproc或ipc一起使用。
于 2011-09-18T08:07:48.883 回答
1
- 确保 OpenMP 数字运算扩展没有竞争条件。
- 避免从多个线程更新窗口或任何其他 GUI 操作 - 使用
#pragma omp single
或使用#pragma omp master
这种东西。 - 如果您有 Python 代码的变量/回调,请确保所有线程在更改变量或进行回调之前都完成了它们应该完成的工作。
来自 QT 的线程和来自 OpenMP 的线程是完全不同的线程,所以这不会造成任何问题。
于 2011-09-19T06:52:25.537 回答