2015-10-20 1 views
0

Я использую PyQt для создания gui для своего приложения и столкнулся с некоторыми проблемами с использованием потоков для отдельных процессов, поэтому начал использовать класс multiprocessing.Process. Я был раньше, используя Сигналы и слоты для связи между рабочим процессом и gui, но класс SignalInstance не может быть маринован, и насколько я знаю, can not использовать с Process, поэтому мне нужно найти другой способ отправить прогресс отчет (процент делается и т. д.) из рабочего процесса, чтобы обновить индикатор выполнения в gui. Каков наилучший способ сделать это?Связь между процессами: Python Multiprocessing

+0

Какие у вас были проблемы с переключением с многопоточного подхода на многопроцессорный подход? – mpcabd

+0

процесс, выполняющийся в рабочем потоке, блокировал gui. Я разместил вопрос здесь по адресу http://stackoverflow.com/questions/33147725/qthread-locking-up-gui-pyside/33172845?noredirect=1#comment54232881_33172845 – user2145312

+0

Попробуйте использовать [postEvent] (http: //doc.qt. io/qt-4.8/qcoreapplication.html # postEvent) с настраиваемым классом событий. Затем вы можете следить за своими событиями, скажем, с фильтром событий и обновлять индикатор выполнения. – ekhumoro

ответ

0

Обратите внимание: this ответьте, вы можете обмениваться памятью между процессами, используя библиотеку многопроцессорности. Документация here (см. 16.6.1.4. Состояние совместного доступа между процессами).

+1

Казалось бы, мне нужно будет передать значение в подпроцесс, который будет обновлять его, поскольку он работает, и мне нужно будет постоянно проверять это значение из моего класса gui и обновлять индикатор выполнения в соответствии с изменяющимся значением ... Неужели это все еще не закрепит мой gui? – user2145312

+0

Я создал класс 'watcher', который запускается в своем потоке. это контролирует объект Value и обновляет gui, который, похоже, работает на меня – user2145312

+0

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