python3 线程池监控线程是否停止工作_Python线程池——个人总结,如果你不喜欢就不要喷,勿...
有bug,請在評論區留下你得真言,謝謝
concurrent.futures 包含線程池和進程池,目前只記錄線程池?ThreadPoolExecutor的使用
小二,上代碼~
from concurrent.futures import ThreadPoolExecutor
import threading
import time
def test(i):
print('threading name is %s, %s, %s' % (threading.current_thread().name, i, i+1))
time.sleep(1)
return 'finished'
if __name__ == "__main__":
pool = ThreadPoolExecutor(max_workers=4, thread_name_prefix='test_')
list_t = []
for i in range(10):
future = pool.submit(test, i)
list_t.append(future)
pool.shutdown(wait=True)
1.創建線程池ThreadPoolExecutor,max_workers:線程池的最大容量;thread_name_prefix:線程名稱前綴,打印線程名稱可查看
2.創建10個任務,給線程池執行,最大容量設置為4,所以只會同時執行4個任務
submit,執行任務,第一個參數test指定執行任務的函數,第二個參數指定給函數的參數
執行任務的函數,return,用于查看任務的執行結果
3.經過測試,當首次創建線程池時,是沒有線程生成的,而是每提交一個任務給線程池,則會生成一個線程
生成的線程數=min(線程池容量(4),期望的任務數range(10))
線程池的線程執行完任務,不會被殺死,而是空閑狀態,等待下個任務進來
4.pool.shutdown(),關閉線程池,結束線程,如果是想等所有任務完成,再關閉線程池,則設置pool.shutdown(wait=True)
from concurrent.futures import ThreadPoolExecutor
import threading
import time
def test(i):
print('threading name is %s, %s, %s' % (threading.current_thread().name, i, i+1))
time.sleep(1)
return 'finished'
if __name__ == "__main__":
pool = ThreadPoolExecutor(max_workers=4, thread_name_prefix='test_')
list_t = []
for i in range(10):
future = pool.submit(test, i)
list_t.append(future)
print(future.done())
pool.shutdown(wait=True)
5.查看任務是否完成,future.done(),返回值是bool
from concurrent.futures import ThreadPoolExecutor
import threading
import time
def test(i):
print('threading name is %s, %s, %s' % (threading.current_thread().name, i, i+1))
time.sleep(1)
return 'finished'
def done_callback(future):
print(future.result())
print('it is stop %s' % threading.current_thread().name)
if __name__ == "__main__":
pool = ThreadPoolExecutor(max_workers=4, thread_name_prefix='test_')
list_t = []
for i in range(10):
future = pool.submit(test, i)
list_t.append(future)
# time.sleep(1.5)
future.add_done_callback(done_callback)
for t in list_t:
print(t.result())
print(threading.active_count())
pool.shutdown(wait=True)
print(threading.active_count())
異步回調,輸出任務執行結果,future.add_done_callback(done_callback),done_callback()為回調函數,即任務執行完或者
退出就調用這個函數
注意:回調函數必須存在一個參數,代表調用函數的任務對象future,可以通過這個對象查看執行結果,future.result()
大家可能注意到,我這里注釋了一行代碼,sleep(),有這樣兩種情況:
1) 存在這行代碼,執行回調函數,打印線程,是主線程
2) 不存在這行代碼,執行回調函數,打印線程,是當前執行任務的線程
3) 總結:有個猜測,回調方法,是線程執行完任務就調用這個方法,如果sleep()阻塞,則這個future脫離了這個線程,只是一個對象,對于這個調用,變成了主線程執行,
大家有知道的評論區留下,謝謝
同步輸入任務執行結果,通過列表存儲這些任務,調用result()獲取執行結果
threading.active_count():查詢當前線程數:生成的線程數=min(線程池容量(4),期望的任務數range(10)) + 1(1代表主線程),關閉線程池后,數量為1,只剩下主線程,代表關閉線程池,則實現線程被殺死
總結
以上是生活随笔為你收集整理的python3 线程池监控线程是否停止工作_Python线程池——个人总结,如果你不喜欢就不要喷,勿...的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: postgresql中装gis插件_Po
 - 下一篇: nodejs mac java home