因为第二循环有依赖于在第一循环中产生的数据,则不能运行在不同的线程这两个循环。
一种方法是在不同的线程这样运行了第一循环的每个迭代:
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()
'多处理'库不是基于线程的;它不是多线程,并且存在显着差异(对于其中一个没有隐式共享状态)。 'threading'是多线程的,它只是GIL的限制,这意味着在进行阻塞工作或使用第三方扩展包(例如'numpy')时,只有在密集型CPU工作期间释放GIL才能获得真正的并行性。 – ShadowRanger