如何使用 Python3 多处理来追加列表?



我有一个空列表empty_list = []和其他 2 个列表:list1=[[1,2,3],[4,5,6],[7,8,9]]list2=[[10,11,12],[13,14,15],[16,17,18]]

我想做两件事:

  1. 我想从列表中拿起[1,2,3][10,11,12]来制作[1,2,3,10,11,12];[4,5,6][13,14,15]形成[4,5,6,13,14,15],最后[7,8,9],[17,18,19]形成[7,8,9,17,18,19]

  2. 附加listA=[1,2,3,10,11,12]listB=[4,5,6,13,14,15]listC=[7,8,9,17,18,19]axis=0清空。

我已经通过非多进程但缓慢地完成了这项工作。我会问如何通过多进程做到这一点。 我有两种幼稚的方法,但不知道如何实现它。

  1. 要使用池,

    制作一个func0,用于拾取子列表并使用pool.map(func0,[lst for lst in[ list1,list2,list3]]合并它们

    制作一个func1,将listA, listB, listC附加到空,然后pool.map(func1,[lst for lst in [listA,listB,listC]])

  2. 使用multiprocessing.Array但我还没有弄清楚该怎么做

此示例可能不需要使用多处理,但我有数千行的列表。

我不确定这是否有帮助,但您可以避免一些列表推导:

empty_list=[]
for l1,l2 in zip(list1,list2):
empty_list.append(l1+l2)

让我们用一些随机列表来检查时间性能:

import timeit
code_to_test = """
import numpy as np
list1 = [np.random.randint(0,10, 100).tolist() for i in range(10_000)]
list2 = [np.random.randint(0,10, 100).tolist() for i in range(10_000)]
empty_list=[]
for l1,l2 in zip(list1,list2):
empty_list.append(l1+l2)
"""
elapsed_time = timeit.timeit(code_to_test, number=100)/100
print(elapsed_time, ' seconds')
0.12564824399999452 seconds

您可以使用dask并行化numpy操作:

import dask.array as da
list1 = da.from_array(list1)
list2 = da.from_array(list2)
result = da.hstack([list1,list2])
result.compute()

相关内容

  • 没有找到相关文章