第二のループは最初のループで生産されたデータに依存しているので、あなたは別のスレッドでこれら二つのループを実行することはできません。
一つの方法は、このような別のスレッドで最初のループの各反復を実行することである。
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()
'multiprocessing'ライブラリはスレッドベースではありません。マルチスレッドではなく、大きな違いがあります(暗黙的に共有されている状態ではありません)。 'threading'はマルチスレッド化されていますが、GILが制限されているだけなので、ブロッキング作業や集中的なCPU作業中にGILをリリースするサードパーティの拡張パッケージ(例えばnumpy)を使用すると真の並列性が得られます。 – ShadowRanger