1 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
for url in splitarr[x]:為 中的序列創(chuàng)建一個(gè)迭代器splitarr[x]。稍后增加 x 并不重要 - 迭代器已經(jīng)構(gòu)建好了。由于其中有打印內(nèi)容,因此所有線程很可能會(huì)x在其仍為零時(shí)抓取并迭代相同的序列。
args一種解決方案是通過中的參數(shù)將遞增值傳遞給 task1 threading.Thread。但線程池更容易。
from multiprocessing.pool import ThreadPool
# generate test array
splitarr = []
for i in range(8):
splitarr.append([f"url_{i}_{j}" for j in range(4)])
def task(splitarr_column):
for url in splitarr_column:
print(url)
with ThreadPool(len(splitarr)) as pool:
result = pool.map(task, splitarr)
在此示例中,len(splitarr)用于為 中的每個(gè)序列創(chuàng)建一個(gè)線程splitarr。然后將每個(gè)序列映射到該task函數(shù)。由于我們創(chuàng)建了正確數(shù)量的線程來處理所有序列,因此它們都會(huì)同時(shí)運(yùn)行。當(dāng)映射完成時(shí),該with子句退出并且池關(guān)閉,從而終止線程。
添加回答
舉報(bào)