作者skyHuan (Huan)
看板Python
标题[问题]
时间Thu Oct 11 13:37:22 2018
最近在练习多执行绪的实作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://webptt.com/cn.aspx?n=bbs/Python/M.1539236244.A.C0D.html
※ 编辑: skyHuan (36.229.214.58), 10/11/2018 14:32:46
1F:推 handsomeLin: 因为你应该用multiprocessing不是multithreading,10/12 14:24
2F:→ handsomeLin: 尤其你这个是CPU密集型的算法 Python多线程就只是轮10/12 14:24
3F:→ handsomeLin: 流算而已 并不会加快速度10/12 14:24
了解,原来这个函式是用在multiprocessing
因为这是实作multithreading的题目
但资料量大的时候thread太多
会有些thread没办法产生导致结果错误
才会想要限制thread的总数量
这点我再想想怎麽办
您提到的其实只是轮流并不会加快速度
确实跑出来的结果threaded比unthreaded慢
感谢您的提醒及解答
※ 编辑: skyHuan (223.140.92.101), 10/12/2018 16:40:44
4F:推 handsomeLin: Python的多线程真的只能处理IO密集 10/13 08:18