使用Python在多处理中传递增加的索引

时间:2018-02-05 23:38:59

标签: python indexing multiprocessing

假设我有以下代码:

items = []
for index, element in elements:
     if index is 7:
         continue
     else:
         items.append(element)

我在代码中使用selenium进行网页报废,所以我想通过使用多处理来加快速度。

所以就是这样:

items = pool.map(iterate_over_elements, elements)

def iterate_over_elements(element):
     if index is 7:
        return None
     else:
        return element

如何在每次调用iterate_over_elements()时将索引作为参数发送?

1 个答案:

答案 0 :(得分:0)

要添加索引,您需要使用enumerate

>>> list(enumerate(['a','b','c']))
[(0, 'a'), (1, 'b'), (2, 'c')]

pool.map(fn, enumerate(elements))会使用fn元组调用(index, element)。要接受这一点,您必须更改iterate_over_elements功能:

def iterate_over_elements(index_and_element):
    index, element = index_and_element
    ...
pool.map(iterate_over_elements, enumerate(elements))

或者,如果你有python> = 3.3,你可以使用Pool.starmap并让iterate_over_elements接受两个参数:

def iterate_over_elements(index, element):
    ...
pool.starmap(iterate_over_elements, enumerate(elements))