[問題] 多執行緒限制thread數量的問題

作者: skyHuan (Huan)   2018-10-11 13:37:22
最近在練習多執行緒的實作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)
作者: handsomeLin (DoGLin)   2018-10-12 14:24:00
因為你應該用multiprocessing不是multithreading,尤其你這個是CPU密集型的算法 Python多線程就只是輪流算而已 並不會加快速度Python的多線程真的只能處理IO密集

Links booklink

Contact Us: admin [ a t ] ucptt.com