我有两个循环遍历不同的列表。我如何编写一个多线程 python 程序,使得外循环的每个元素的内循环的所有迭代都发生在不同的线程中?例如,我们有以下两个列表:
A = [1,2,3]
B = [4,5,6]
C = []
for i in A:
for j in B:
C.append(i+j)
在这里,我们总共有九次迭代。每次第一个迭代器在 A 的一个元素上时,另一个迭代器迭代 B 的所有元素。并且,此操作重复三次。我想知道如何将这三个操作放在三个单独的线程中。
我建议使用 Numba 的 prange 来完成这类任务。 http://numba.pydata.org/
由于 GIL,Vanilla CPython 不能很好地处理并行处理。
import numba
@numba.njit(parallel=True)
def work():
A = [1,2,3]
B = [4,5,6]
X = [[0 for x in range(0)] for _ in A]
for idx in numba.prange(len(A)):
i = A[idx]
for j in B:
X[idx].append(i+j)
C = [0 for x in range(0)]
for x in X:
C = C + x
print(C)
work()
我是一名优秀的程序员,十分优秀!