2

我编写了一个小程序来评估元胞自动机的状态并将其绘制在屏幕上。我有双核PC,所以为了提高效率,我决定在两个线程中进行计算。我自己实现了 QThread,如下所示:

clacc MyThread(QThread):
    def run(self):
        ...

然后我制作这个类的两个实例并调用它们:

thread1 = MyThread()
thread2 = MyThread()

thread1.start()
thread2.start()

当我打开任务管理器时,我发现它们正在一个接一个地执行:首先是thread1,然后是thread2,然后是thread1,以此类推。问题是:有没有一种方法可以调用它们,这样它们就可以在不同的内核上独立工作,并且在某个时刻,而不是一个接一个地工作?

4

1 回答 1

2

如果你使用线程,你不能随心所欲地提高效率,因为它不会做并行化。您需要进行多处理。为此,您可以使用多处理模块,它的工作方式类似于线程模块:

import multiprocessing

class MyProcess(multiprocessing.Process):

    def run(self):
        # new process context

您不会共享相同的上下文,因此您无法通过方法调用直接进行通信。我建议您使用一些“消息队列”系统,例如:multiprocessing.Queue 或 zeromq(非常棒的库!)。

如果您查看“Ventillar”zmq 设计模式,您会发现它完全符合您的要求:并行化工作人员。

于 2012-05-18T16:04:26.387 回答