Как использовать multiprocessing.Pool правильно с PySide для создания неблокирующего графического интерфейса
Я пытаюсь использовать многопроцессорную обработку для создания неблокирующего графического интерфейса. Функция Multiprocessing.Pool.appy_async () позволяет добавить функцию обратного вызова, что упрощает обновление основного графического интерфейса после завершения интенсивной работы. Тем не менее, следующий код по-прежнему блокируется при нажатии на кнопку1. Как я могу изменить это, так что, пока выполняется обратный вызов button1, кнопка 2 все еще отвечает. Я запускаю python 2.7 и многопроцессорную обработку 0.70a1.
from PySide.QtCore import * from PySide.QtGui import * import multiprocessing import time import sys def f(x): '''This is a time-intensive function ''' y = x*x time.sleep(2) return y class MainWindow(QMainWindow): #You can only add menus to QMainWindows def __init__(self): super(MainWindow, self).__init__() self.pool = multiprocessing.Pool(processes=4) button1 = QPushButton('Connect', self) button1.clicked.connect(self.apply_connection) button2 = QPushButton('Test', self) button2.clicked.connect(self.apply_test) self.text = QTextEdit() vbox1 = QVBoxLayout() vbox1.addWidget(button1) vbox1.addWidget(button2) vbox1.addWidget(self.text) myframe = QFrame() myframe.setLayout(vbox1) self.setCentralWidget(myframe) self.show() #display and activate focus self.raise_() def apply_connection(self): result = self.pool.apply_async(f, [10], callback=self.update_gui) result.get(3) def update_gui(self, result): self.text.append('Applied connection. Result = %d\n' % result) def apply_test(self): self.text.append('Testing\n') if __name__ == '__main__': app = QApplication(sys.argv) gui = MainWindow() app.exec_()
- «Иногда», получая InterfaceError на PostgreSQL с Peewee ORM
- Что такое хороший способ реализовать что-то похожее на интерфейс в Python?
- Проблемы с просмотром PDF-файлов
- Какие библиотеки C ++ следует использовать для большого параллельного вычисляющего число-хрустального проекта, использующего сторонние приложения
- Отзывчивая запись PyAudio
result.get(3)
блокирует 3 секунды, чтобы дождаться результата. Не вызывайте get
, обратный вызов будет обрабатывать результат.
- Когда я создаю экземпляр подкласса python, он перезаписывает атрибут базового класса
- Ошибка, когда ex mkvirtualenv в Mountain Lion
- Поиск приложения GUI для ввода команд Linux
- Как подклассы str в Python
- В компиляции SWIG: В заголовочном файле в интерфейсе не удается разрешить другие файлы заголовков.
- Arduino Sketch работает с Serial Monitor, но не с pyserial
- Как документировать и тестировать интерфейсы, необходимые для формальных параметров в Python 2?
- Чтение и обработка пакетов из сетевого интерфейса с помощью python
- Как установить aggdraw после этой ошибки?
- Настроить тип параметра функции в Python?
- Как проверить статус или убить внешний процесс с помощью python