亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用“for”循環進行多線程?

如何使用“for”循環進行多線程?

DIEA 2021-11-23 19:44:47
之前可能已經問過幾次類似的問題,但它們似乎都沒有我的案例/場景,或者它不起作用。我正在嘗試對一個 for 循環進行多線程處理,如示例中所示。這個 for 循環將執行一個函數,因為它循環遍歷一個數組。我想多線程它。例子:array = ["a", "b", "c", "d", "e"]def dosomething(var):    #dosomething this is just an example as my actual code is not relevant to this questionfor arrayval in array:    dosomething(arrayval)這應該通過數組循環并執行功能dosomething與變量a,那么b,c等等。關于我如何做到這一點的任何想法?
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

您可以使用threading.Thread:


from threading import Thread

from time import sleep

from random import randint


def dosomething(var):

    sleep(randint(1,5))

    print(var)


array = ["a", "b", "c", "d", "e"]

threads = []

for arrayval in array:

    threads.append(Thread(target=dosomething, args=(arrayval,)))

    threads[-1].start()

for thread in threads:

    thread.join()

這會在 5 秒內以隨機順序輸出:


e

b

c

a

d

如果要限制線程數,可以multiprocessing.pool.ThreadPool改用。以下示例將工作線程的數量限制為 2,因此可能需要長達 15 秒的時間才能完成(如果所有工作人員恰好需要 5 秒):


from multiprocessing.pool import ThreadPool

from time import sleep

from random import randint


def dosomething(var):

    sleep(randint(1,5))

    print(var)


array = ["a", "b", "c", "d", "e"]

with ThreadPool(processes=2) as pool:

    pool.map(dosomething, array)


查看完整回答
反對 回復 2021-11-23
  • 1 回答
  • 0 關注
  • 434 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號