共計(jì) 925 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
在 Python 中,可以使用 concurrent.futures
模塊來(lái)實(shí)現(xiàn)線程池并發(fā)多任務(wù)。concurrent.futures
模塊提供了 ThreadPoolExecutor
類來(lái)創(chuàng)建線程池,并且提供了一些方法來(lái)提交任務(wù)并獲取結(jié)果。
下面是一個(gè)簡(jiǎn)單的示例代碼,演示了如何使用線程池并發(fā)執(zhí)行多個(gè)任務(wù):
import concurrent.futures
def task(n):
# 執(zhí)行任務(wù)的函數(shù),這里簡(jiǎn)單地打印任務(wù)編號(hào)
print(f"Task {n} executed")
return n
# 創(chuàng)建一個(gè)線程池,最多同時(shí)執(zhí)行 2 個(gè)線程
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
# 提交任務(wù)給線程池并獲取 Future 對(duì)象
futures = [executor.submit(task, i) for i in range(5)]
# 獲取任務(wù)的執(zhí)行結(jié)果
for future in concurrent.futures.as_completed(futures):
result = future.result()
print(f"Task {result} completed")
在這個(gè)示例中,我們首先定義了一個(gè) task
函數(shù),這個(gè)函數(shù)表示我們要執(zhí)行的任務(wù)。然后,通過(guò)創(chuàng)建 ThreadPoolExecutor
對(duì)象來(lái)創(chuàng)建一個(gè)線程池,指定最多同時(shí)執(zhí)行 2 個(gè)線程。接下來(lái),我們使用 executor.submit()
方法將多個(gè)任務(wù)提交給線程池,并得到了一個(gè) Future 對(duì)象的列表。最后,我們使用 concurrent.futures.as_completed()
方法來(lái)循環(huán)迭代這些 Future 對(duì)象,并使用 result()
方法獲取任務(wù)的執(zhí)行結(jié)果。
注意,ThreadPoolExecutor
類還提供了其他方法,如 map()
方法可以用來(lái)將一個(gè)可迭代對(duì)象中的元素分發(fā)給線程池并獲取結(jié)果。另外,還可以使用 submit()
方法的 timeout
參數(shù)來(lái)設(shè)置超時(shí)時(shí)間,避免任務(wù)執(zhí)行時(shí)間過(guò)長(zhǎng)導(dǎo)致阻塞。
總結(jié)起來(lái),使用 concurrent.futures
模塊的 ThreadPoolExecutor
類可以很方便地實(shí)現(xiàn)線程池并發(fā)多任務(wù)。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!