我正在嘗試從 for 回圈創建一系列執行緒來啟動并行化任務。問題是我不知道如何保持每次迭代中的變數狀態在執行時不被共享。以這個簡單的例子為例,我分別在 10 個不同的執行緒上列印了 0 到 9 的值。
import threading
from time import sleep
threads = []
for i in range(0,10):
def op():
sleep(3)
print(i)
threads.append(threading.Thread(target = op))
# start threads
for th in threads:
th.start()
# join threads
for th in threads:
th.join()
我的輸出都是 9,因為這是最后一次迭代。如何在每次迭代中隔離我的狀態,以便獲得數字 1 到 9?而不是所有的9?
uj5u.com熱心網友回復:
每個執行緒列印相同值的原因是因為到執行緒啟動時,i已經是 9 并且每個執行緒看到相同的變數。
如果目標是確保每個執行緒都有一個唯一的值來處理,則可以將引數傳遞給執行緒函式。(此示例還將 的定義移到op回圈外)。
def op(n):
sleep(3)
print(n)
for i in range(0,10):
threads.append(threading.Thread(target = op, args=(i,)))
這將列印值0通過9(不一定是為了雖然,因為執行緒運行不定)。
如果我仍然誤解了這方面的某些方面,請澄清。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335986.html
