두 번째 루프는 첫 번째 루프에서 생성 된 데이터에 의존성을 가지고 있기 때문에 당신은 다른 스레드에서이 두 개의 루프를 실행할 수 없습니다.
한 가지 방법은 다음과 같이 다른 스레드에서 첫 번째 루프의 각 반복을 실행하는 것입니다 :
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
값을 생성하고 큐에서 큐 2 루프 읽어 값을 추가하고이 같은 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()
'multiprocessing' 라이브러리는 스레드 기반이 아닙니다. 멀티 스레딩이 아니며 중요한 차이가 있습니다 (암시 적으로 하나의 상태를 공유하지 않음). '스레딩 '은 멀티 쓰레딩입니다. 단지 GIL에 제한이 있습니다. 블로킹 작업을 할 때 또는 집중적 인 CPU 작업 중에 GIL을 릴리스하는 타사 확장 패키지 (예 : numpy)를 사용할 때만 진정한 병렬 처리가 가능합니다. – ShadowRanger