对嵌套for循环进行最大cpu使用的最简单方法是什么?

时间:2017-11-25 15:22:24

标签: python multithreading optimization multiprocessing nested-loops

我有代码,可以创建独特的元素组合。有6种类型,每种类型大约有100种。所以有100 ^ 6种组合。必须计算每个组合,检查相关性,然后丢弃或保存。

代码的相关位如下所示:

def modconffactory():
for transmitter in totaltransmitterdict.values():
    for reciever in totalrecieverdict.values():
        for processor in totalprocessordict.values():
            for holoarray in totalholoarraydict.values():
                for databus in totaldatabusdict.values():
                    for multiplexer in totalmultiplexerdict.values():
                        newconfiguration = [transmitter, reciever, processor, holoarray, databus, multiplexer]
                        data_I_need = dosomethingwith(newconfiguration)
                        saveforlateruse_if_useful(data_I_need)

现在这需要很长时间,这很好,但现在我意识到这个过程(进行配置然后计算供以后使用)一次只使用我的8个处理器内核中的一个。

我一直在阅读有关多线程和多处理的内容,但我只看到不同进程的示例,而不是如何多线程处理一个进程。在我的代码中,我调用了两个函数:'dosomethingwith()'和'saveforlateruse_if_useful()'。我可以将它们分成不同的进程并将它们同时运行到for循环中,对吗?

但是for循环本身呢?我可以加快这个过程吗?因为那是消耗时间的地方。 (< - 这是我的主要问题)

有骗子吗?比如编译成C然后自动进行os多线程?

1 个答案:

答案 0 :(得分:0)

你可以用这种方式运行你的功能:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
   p = Pool(5)
   print(p.map(f, [1, 2, 3]))

https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers