Сигнал PyQt5 от резьбового объекта вызывает segfault, когда тип соединения = Qt.DirectConnection - PullRequest
0 голосов
/ 18 марта 2019

У меня есть некоторый Python-код Python, который загружает набор файлов.Я использую multiprocessing.dummy, в качестве оболочки для потоков, использую apply_async для одновременной загрузки.Из своей многопоточной функции я хочу обновить индикатор выполнения в главном графическом интерфейсе, но когда я делаю это, QT выбирает подключение к очереди для сигнала, и запускается функция в главном потоке, который воспроизводит загруженные файлы (загруженные файлы), а затем внезапно обновляется индикатор выполнения, сообщающий о файлах как о загружаемых, даже если они были загружены некоторое время назад.

Если я создаю сигнал с помощью Qt.DirectConnection, я получаю желаемое поведениено после загрузки файлов я получаю segfault, и основной поток завершает работу.Я уверен, что должен быть какой-то способ решения этой проблемы, поскольку это не является необычной задачей, но, попробовав мьютексы, сигналы к сигналам и ряд других попыток, я почти вырываю волосы.Я уверен, что ответ очевиден.

Я читал другие ответы здесь, для подобных проблем, но нет ничего особенно просветляющего.

PyQt5 Сигналы и Threading

предлагает подключиться изнутри созданного потока, но я не хочу пробовать это, так как поток создан в классе, который объединен в пользовательский объект в основном потоке, и я действительно не хочупередать ссылку вниз по иерархии.Если мне нужно, я полагаю, но я попытался вместо этого подключить сигнал внутри поточной функции для вызова метода внутри класса, который затем вызвал сигнал, но безуспешно, только те же результаты.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 20 марта 2019

В конце концов я обнаружил, что ошибка вызвана моим присоединением к пулу потоков из основного потока после вызова thread_pool.apply_async.Я удалил операторы close и join, и прямое соединение по сигналу работало нормально, как и ожидалось.Я продолжал получать предупреждение:

QObject::setParent: Cannot set parent, new parent is in a different thread

Но программа работала как положено.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...