我需要在不同的线程中进行每次迭代(对于这两个循环中的每一个)。
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)
答案 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
并打印i
和j
,如下所示:
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有一个很好的例子。