[问题] 多执行绪限制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