【问题标题】:How to use multicore python with PyQt4 process?如何在 PyQt4 进程中使用多核 python?
【发布时间】:2013-01-02 20:12:09
【问题描述】:

我正在用 pyqt4 编写一个应用程序,它必须读取并解析大量的 xml 文件。完成单线程需要一段时间来完成所有解析并使数千个 python 对象与传入的 xml 相对应。我已经对代码进行了概要分析,据我所知,它是计算绑定的,而不是 I/O。

我想将应用程序转换为多核模型以分散负载,使用工人农场模型(python 中的 Process.Pool)。

但是,我也希望能够从工作人员那里发出进度信号以更新 gui。

在我看来,到目前为止,QThread 不支持多核(因为它在一个核心上循环),但我需要 QThread 来执行 Signal,所以基本上我不能这样做。

我也许可以安排不需要来自工人的信号,只来自农民,这可能意味着我可以继续,但我想知道:我可以将 python 对象列表从一个进程返回到另一个进程?

【问题讨论】:

    标签: python pyqt4 multiprocessing signals-slots


    【解决方案1】:
    • 产生一个 QThread。
    • QThread 可以将任务分配给多处理池。你可能 使用带有回调参数的pool.apply_async()
    • 回调参数允许您指定一个函数,该函数是 在目标函数完成时调用。
    • 回调在 QThread 中运行,并被发送返回值 目标函数作为其唯一的参数。
    • 每次回调函数运行时,您都可以将 GUI 更新为 指明进度。

    【讨论】:

    • 谢谢你。这大致就是我对“安排不需要”段落的疑惑,尽管很高兴知道它可以工作。多处理会返回我的 python 对象吗?
    • 多处理池通过Queues 与子进程通信。通过队列传输的所有内容都是腌制的。所以目标函数返回的值必须是可picklable的。这是things that can be pickled 的类型列表。请注意,也可以教 Python how to pickle new types of objects
    • 所以简短的回答是,只要返回值是可腌制的,一切都很好。
    • 有这方面的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2018-10-04
    • 2014-07-25
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多