Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入使用OpenMP的python扩展后显示PyQt4窗口时崩溃_Python_Qt_Pyqt_Openmp_Python C Extension - Fatal编程技术网

导入使用OpenMP的python扩展后显示PyQt4窗口时崩溃

导入使用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前端程序创建一个独立程序。并让

我正在开发一个python应用程序,它使用我自己开发的C扩展模块。扩展模块执行一些繁重的数字运算,并使用OpenMP。
我最近使用PyQt4向Python应用程序添加了一些GUI组件。但是,当我显示窗口时,应用程序在窗口完全绘制之前崩溃(窗口很快就会显示)。我能够找到问题的根源:当我在没有OpenMP支持的情况下编译数字处理C扩展时,窗口显示良好,一切正常。我想这与OpenMP和Qt之间的线程有关。有人做过类似的观察吗

作为一种解决方法,您可以使用openmp和Qt前端程序创建一个独立程序。并让他们使用tcp套接字或您熟悉的东西进行通信(dll是另一个选项?)

关键是,隔离不同的模块,如果一个模块出现故障,您知道哪个部分出现故障。 作为一个完整的大程序,很难找到一个野生指针…

可能是PyQT中的某些内容是线程不安全的

例如,您可以尝试使用inproc或ipc

  • 确保OpenMP数字处理扩展没有竞争条件
  • 避免从多个线程更新windows或任何其他GUI操作-使用
    #pragma omp single
    #pragma omp master
    来更新此类内容
  • 如果您对python代码有一个变量/回调,请确保所有线程在更改变量或进行回调之前都完成了它们应该完成的任务

  • 来自QT的线程和来自OpenMP的线程是完全不同的线程,因此这不会带来任何问题。

    好的建议,但这不是一个选项问题是,我甚至没有在我的C扩展和PyQT应用程序中调用任何东西。因此,我认为没有任何比赛条件。当我调用QApplication的exec方法而之前没有调用任何C代码时,我的应用程序就崩溃了。