当前位置: 首页 > 面试题库 >

多处理问题[pyqt,py2exe]

戚默
2023-03-14
问题内容

我正在使用PyQt4编写GUI程序。我的主窗口中有一个按钮,单击此按钮即可。我希望启动一个后台进程,该进程是从processing.Process派生的类的实例。

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

    def run(self):
        ...

(请注意,我使用的 是从http://code.google.com/p/python-
multiprocessing/
获得的python-
multiprocessing的Python2.5端口,
这就是为什么它正在处理.Process而不是multiprocessing.Process。我想这应该没什么关系。对吗?)

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

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

该程序可以在python解释器下正常运行,即,如果它是从命令行“ python myapp.py”启动的。

但是,在使用py2exe打包程序之后,每次单击该按钮时,都会弹出主窗口的副本,而不是启动后台任务。我不确定这种行为的原因是什么。我想这与http://docs.python.org/library/multiprocessing.html#multiprocessing-
programming上的以下注释有关

“此包中的功能要求
方法可以由子级导入。这在编程指南中已进行了介绍,但是在这里值得指出。这意味着某些示例,例如多处理。池示例在交互式解释器中不起作用。 ”

如果 name ==“ main ”,我唯一的位置是在主模块中,就像在典型的pyqt程序中一样

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

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


问题答案:

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

该程序可以在python解释器下正常运行,即,如果它是从命令行“ python myapp.py”启动的。

但是,使用py2exe打包程序后,每次单击该按钮时,>而不是启动后台任务,都会弹出主窗口的副本。

您需要向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



 类似资料:
  • 问题内容: 我想通过多个客户端子进程将数据从客户端发送到TLS TCP套接字中的服务器,因此我与所有子进程共享相同的ssl套接字。通信可以使用一个子进程,但是如果我使用多个子进程,则TLS服务器将崩溃,并显示(SSL3_GET_RECORD:decryption失败或mac记录错误)。 更具体地说: 它不依赖于哪个进程首先调用该方法,但是此进程是此后唯一可以调用该方法的进程。如果另一个进程调用,服

  • 本文向大家介绍JavaScript多并发问题如何处理,包括了JavaScript多并发问题如何处理的使用技巧和注意事项,需要的朋友参考一下 经常在写代码的时候碰到这样的场景:页面初始化时显示loading页,同时启动多个ajax并发请求获取数据,当每个ajax请求返回时结束loading。 举个例子,一个下订单的页面,要查询常用地址信息、商品信息、地市信息…而这些请求都是异步的,希望等到所有数据加

  • 本文向大家介绍事件处理示例-PyQt,包括了事件处理示例-PyQt的使用技巧和注意事项,需要的朋友参考一下 按钮接受您的命令 1.在Python Shell或CMD提示符下获取输出 之前,我们深入研究了源代码及其引人入胜的输出。让我在此程序的几个关键部分为您提供帮助: window()是此处的用户定义函数,我们在其中设计并绘制了布局框架。 我们在这里使用了一个使用QDialog()的对话框。您可以

  • 本文向大家介绍PyQt事件处理机制,包括了PyQt事件处理机制的使用技巧和注意事项,需要的朋友参考一下 事件 在控制台生成的应用程序中,指令/命令按顺序执行。但是基于GUI的应用程序是事件驱动的。这意味着函数/方法是为了响应某些事件而执行的。这些事件可能是用户生成的(单击按钮、选择项目、鼠标单击等);但有时系统也会生成一些事件(窗口管理器、Internet连接或计时器)。当我们执行exec()方法

  • 问题内容: 我有一个关于异常处理的问题。考虑以下Java代码段。 我知道这是处理异常的推荐方法。但是我可以通过使用以下代码片段来实现相同的目的。 有人可以告诉我第二种方法的弊端吗? 问题答案: 第二种方法可读性较差。此外,即使“聪明”的窍门是使用instanceof关键字,Pokemon异常处理也永远不会走。无论如何,我不是在取笑或嘲笑您,但最好是编写供人类阅读和维护的代码,而不是计算机。

  • 本文向大家介绍事件处理示例(2)-PyQt,包括了事件处理示例(2)-PyQt的使用技巧和注意事项,需要的朋友参考一下 让我们尝试一些更有趣的东西, 1)键盘产生的事件 在执行程序之前,让我们尝试了解代码的关键点。这将有助于我们了解事件,信号和时段的性质。让我们一一研究它们: 这里使用一个简单的窗口作为界面。 keyPressEvent(),这只是PyQt框架中的预定义函数;用于定义所生成按键事件