如何在python中并行化2个循环

时间:2016-10-01 13:11:44

标签: python multithreading

我需要在不同的线程中进行每次迭代(对于这两个循环中的每一个)。

var = 5
a = -7
b = 7
for i in range(var):
    for j in range(a, b):
        print(i, "   ", j)

我该怎么做?

UPD:

var = 5
a = -7
b = 7
max = 0
for i in range(var):
    for j in range(a, b):
        print(i, "   ", j)
        if i+j>max:
            max=i+j
print(max)

2 个答案:

答案 0 :(得分:1)

您不能在不同的线程中运行这两个循环,因为第二个循环依赖于在第一个循环中生成的数据。

一种方法是在不同的线程中运行第一个循环的每次迭代,如下所示:

from threading import Thread
var = 5
a = -7
b = 7

def inner_loop(i):
    for j in range(a, b):
        print(i, "   ", j)

for i in range(var):
    Thread(target=inner_loop, args=[i]).start()

另一种方式是生产者消费模式。第一个循环生成i值并将其添加到队列中,第二个循环从队列中读取值并生成j并打印ij,如下所示:

from threading import Thread

var = 5
a = -7
b = 7

queue = []
finished = False

def inner_loop():
    while not finished or len(queue) > 0:
        if len(queue) == 0:
            continue
        i = queue.pop()
        for j in range(a, b):
            print(i, "   ", j)

def first_loop():
    for i in range(var):
        queue.append(i)
    finished = True

Thread(target=inner_loop).start()
Thread(target=first_loop).start()

答案 1 :(得分:1)

如果你想要真正的多线程(线程'库不做!),请使用多处理'图书馆。 introduction section in the docs有一个很好的例子。