Я разрабатываю приложение python, которое использует модуль расширения C, который я также разработал сам. Модуль расширения выполняет тяжелое хрустение и использует OpenMP. Недавно я добавлял некоторые компоненты графического интерфейса в мое приложение Python с помощью PyQt4. Однако, когда я показываю окно, приложение падает до того, как окно будет полностью нарисовано (окно появляется очень коротко). Я смог отследить проблему: когда я скомпилирую свое C-расширение с номером без поддержки OpenMP, окно отображается отлично, и все работает. Я предполагаю, что это имеет какое-то отношение к потоковым материалам между OpenMP и Qt. Кто-нибудь сделал подобное наблюдение?
#pragma omp single
или #pragma omp master
для такого рода материалов.Нити из QT и поток из OpenMP - это совершенно разные потоки, поэтому это не должно создавать никаких проблем.
Возможно, что-то в PyQT небезопасно.
Может быть, вы можете попробовать использовать zeromq с помощью inproc или ipc, например.
В качестве обходного пути вы можете создать автономную программу с использованием openmp и программу Qt frontend. и заставить их общаться с помощью tcp-сокета или что-то знакомое (dll - это еще один вариант?).
Дело в том, что изолировать разные модули, если один из модулей выходит из строя, вы знаете, какая часть терпит неудачу. как одна целая большая программа, трудно найти один дикий указатель...