看板 Python 關於我們 聯絡資訊
最近在練習多執行緒的實作qsort 輸入的資料量不大的時候可以順利完成 但當資料量很大的時候thread會太多跑不動 我在找怎麼限制thread數量的方法時 有查到一個ThreadPoolExecutor可以限制max_workers 如以下程式碼前三行註解掉的地方 但我在pool.submit的時候 不確定要在建立thread的時候做 還是在thread .start()的時候做 其實也不確定這個方法是不是可行的 用threading.active_count()看好像thread數量還是不斷爆增 想請問該如何正確使用 或是有沒有其他更好的方法 感謝各位前輩解答 import threading #from concurrent.futures import ThreadPoolExecutor #pool = ThreadPoolExecutor(max_workers = 2) def QuickSort(A, p, r): if p < r: q = Partition(A, p, r) #QuickSort(A, p, q-1) t1 = threading.Thread(target = QuickSort, args = (A, p, q-1)) #QuickSort(A, q+1, r) t2 = threading.Thread(target = QuickSort, args = (A, q+1, r)) t1.start() t2.start() #print(threading.active_count()) t1.join() t2.join() if __name__ == '__main__': ... QuickSort(L, 0, len(L)-1) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.214.58 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1539236244.A.C0D.html ※ 編輯: skyHuan (36.229.214.58), 10/11/2018 14:32:46
handsomeLin: 因為你應該用multiprocessing不是multithreading,10/12 14:24
handsomeLin: 尤其你這個是CPU密集型的算法 Python多線程就只是輪10/12 14:24
handsomeLin: 流算而已 並不會加快速度10/12 14:24
了解,原來這個函式是用在multiprocessing 因為這是實作multithreading的題目 但資料量大的時候thread太多 會有些thread沒辦法產生導致結果錯誤 才會想要限制thread的總數量 這點我再想想怎麼辦 您提到的其實只是輪流並不會加快速度 確實跑出來的結果threaded比unthreaded慢 感謝您的提醒及解答 ※ 編輯: skyHuan (223.140.92.101), 10/12/2018 16:40:44
handsomeLin: Python的多線程真的只能處理IO密集 10/13 08:18