gpt4 book ai didi

python - 多处理问题 [pyqt, py2exe]

转载 作者:太空狗 更新时间:2023-10-29 16:53:36 25 4
gpt4 key购买 nike

我正在使用 PyQt4 编写一个 GUI 程序。我的主窗口中有一个按钮并单击此按钮。希望启动后台进程这是派生类的实例来自加工.过程.

class BackgroundTask(processing.Process):
def __init__(self, input):
processing.Process.__init__(self)
...

def run(self):
...

(注意我使用的是Python2.5端口获得的python-multiprocessing从 http://code.google.com/p/python-multiprocessing/这就是它正在处理的原因。过程而不是 multiprocessing.Process。我想这应该不会有什么不同。我说得对吗?)

连接到按钮点击信号的代码就像

 processing.freezeSupport()
task = BackgroundTask(input)
task.start()

该程序在 python 解释器下按预期工作,即如果它是从命令行“python myapp.py”启动的。

但是,我用py2exe打包程序后,每次当我点击那个按钮时,启动后台任务,副本弹出主窗口。我不知道这种行为的原因是什么。我猜它与以下说明有关在 http://docs.python.org/library/multiprocessing.html#multiprocessing-programming

“此包中的功能要求子程序可以导入ma​​in方法。这在编程指南中有所介绍,但值得在这里指出。这意味着一些示例,例如多处理.Pool 示例在交互式解释器中不起作用"

如果 name == "ma​​in"我唯一的地方是在主模块中与典型的 pyqt 程序一样

if __name__ == "__main__":
a = QApplication(sys.argv)
QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
w = MainWindow()
w.show()
a.exec_()

关于如何解决这个问题的任何解决方案?谢谢!

最佳答案

我认为您的实际问题与此有关:

The program works as expected under the python intepreter, i.e. if it is started from the command line "python myapp.py".

However, after I package the program using py2exe, every time when I click that button, > instead of starting the background task, a copy of the main window pops up.

您需要添加对 freeze_support() 函数的特殊调用,以使多处理模块与“卡住”可执行文件(例如,使用 py2exe 制作的那些)一起工作:

if __name__ == "__main__":
# add freeze support
processing.freeze_support()
a = QApplication(sys.argv)
QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
w = MainWindow()
w.show()
a.exec_()

引用:http://docs.python.org/library/multiprocessing.html#multiprocessing.freeze_support

关于python - 多处理问题 [pyqt, py2exe],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2073942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com