Python并行遍历列表?

ben*_*man 1 python iteration parallel-processing

我创建的列表中包含的项不超过8个,现在我用标准的for循环“针对列表中的项目:”遍历该项目:我想知道是否有一种方法可以准确地检查所有元素同时?我看过一些有关使用zip同时遍历2个列表的帖子,这可能会有所帮助。

如果没有办法同时遍历一个list元素,我想我需要将一个单独的列表拆分为4个单独的列表,然后使用zip遍历2个,并在一个单独的线程上同时进行另外2个,这似乎但这可能是一个笨拙的修复程序。

任何帮助,将不胜感激。

编辑 抱歉,我不清楚

apples = ['green', 'green', 'green', 'red']
Run Code Online (Sandbox Code Playgroud)

现在,我使用for循环遍历每个元素,

for apple in apples:
    checkAppleColour(apple)
    #Do some more stuff depending on colour....
Run Code Online (Sandbox Code Playgroud)

现在,它一个接一个地循环遍历苹果中的每个元素,我想做的是在每毫秒精确计数的同时,对每个项目进行一次颜色检查(使用的示例代码,但原理是对于我要达到的目标也是如此)。

在这里,性能是关键,我不介意是否必须使用它的线程,但是我需要最大的速度/效率来检查每个元素,我的猜测是并行性是做到这一点的方式,我只是不太确定该怎么做。

weg*_*gry 5

如果可以将函数映射到列表,则并行性很容易。

def addOne (x):
    return x + 1
Run Code Online (Sandbox Code Playgroud)

默认映射在一个线程上执行操作。

map(addOne, range(1, 4)) #When iterated over produces [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

如果您的问题是地图,则意味着它是平行的。

from multiprocessing import Pool

pool = Pool()
pool.map(addOne, range(1, 4)) ##When iterated over produces [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

这使用多个过程。multiprocessing.dummy.Pool是一个线程池。有关两者背后原理的详尽介绍,请参见本文