Я пишу программу GUI, используя PyQt4. В главном окне есть кнопка. Надеюсь запустить фоновый процесс , который является экземпляром класса, полученного , из обработки. Процесс.проблема многопроцессорности [pyqt, py2exe]
class BackgroundTask(processing.Process):
def __init__(self, input):
processing.Process.__init__(self)
...
def run(self):
...
(Обратите внимание, что я использую порт python2.5 из питона многопроцессорной полученного из http://code.google.com/p/python-multiprocessing/ , поэтому это processing.Process вместо multiprocessing.Process. Я думаю, это должно нет разницы. Правильно ли я?)
Этот код связан с кнопкой мыши сигнал что-то просто, как
processing.freezeSupport()
task = BackgroundTask(input)
task.start()
Программа работает так, как ожидалось, под встроенным интерпретатором python, то есть , если она запущена из командной строки «python myapp.py».
Однако, после того, как я упаковать программу, используя py2exe, каждый раз, когда я нажимаю на эту кнопку, вместо начать фоновую задачу, копия главного окна выскочит. Я не уверен , в чем причина такого поведения. Я думаю это связано со следующей запиской на имя в http://docs.python.org/library/multiprocessing.html#multiprocessing-programming
«Функциональность в рамках этого пакета требует, чтобы главный метод быть ввозу детьми. Об этом рассказывается в руководствах по программированию, однако стоит отметить здесь . Это означает, что некоторые примеры, такие как примеры multiprocessing.Pool не будет работать в интерактивном интерпретаторе «
Единственное место, где я есть, если имя ==» главный "в главном модулекак в типичной PyQt программы
if __name__ == "__main__":
a = QApplication(sys.argv)
QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
w = MainWindow()
w.show()
a.exec_()
Любые решения о том, как решить эту проблему? Благодаря!
Можете ли вы пояснить: защитили ли вы основной модуль, как описано в документах многопроцессорности? или у вас нет доступа к основному модулю (я не знаю, как работает pyqt)? также стоит проверить, что вы используете последнюю версию py2exe. У меня были проблемы в прошлом, которые, как оказалось, были вызваны устаревшими py2app/py2exe – James
Спасибо за комментарий. Я просто добавил часть __name__ == "__main__" в свой пост. Не уверен, защищаю ли я основной модуль или нет. Последняя версия py2exe, найденная мной из http://sourceforge.net/projects/py2exe/files/, была выпущена в 2008-11-16, поэтому я думаю, что использую последнюю версию py2exe. –