1. theading.current_thread() 當前線程對象python
2. .getName() 獲取線程名異步
3. .ident() 獲取線程idide
4. threading.enumerate() 當前正在運行的線程對象的一個列表函數
5. threading.active_count() 當前正在運行的線程數量spa
1.先進先出隊列 queue.Queue()線程
2.先進後出隊列 queue.LifoQueue()協程
(和用法相同)對象
3.優先級隊列 queue.priorityQueue()blog
Put的數據是一個元組,元組的第一個參數是優先級數字,隊列
數字越小優先級越高,越先被get到被取出來,第二個參數
是put進去的值,若是說優先級相同,那麼值別忘了應該是
相同的數據類型,字典不行
1.from concurrent_futures import ThreadPoolExecutor,ProcessPoolExecutor
引入模塊
2. p = ThreadPoolExecutor(4)
默認的線程個數是cpu個數的5倍
3. p = ProcessPoolExecutor(4)
默認的進程個數是cpu的個數
4. p.map(f1,可迭代對象)
異步執行
5. res = p.submit(f1,11,12)
異步提交任務 參數但是多個
6. res.result()
(和.get方法同樣,若是沒有結果會等待,阻塞程序)
7. shutdown()
(和close+join用法同樣,鎖定線程池,等待線程池中的
任務所有執行完畢)
8.線程池的回調函數
協程是一種用戶態的輕量級線程,即協程是由用戶程序本身控制調度的。
1.生成器類型協程(實現了‘切換+保存狀態’,但沒有提高效率)
2.greenlet模塊類型協程(實現了‘切換+保存狀態’,但沒有提高效率)
3.gevent模塊類型的協程
即實現了‘切換+保存狀態’,又提高效率
import gevent from gevent import monkey;monkey.patch_all() import time import threading def f1(): print('第一次f1') # print(threading.current_thread().getName()) # gevent.sleep(1) time.sleep(2) print('第二次f1') def f2(): # print(threading.current_thread().getName()) print('第一次f2') # gevent.sleep(2) time.sleep(2) print('第二次f2') g1 = gevent.spawn(f1) #異步提交了f1任務 g2 = gevent.spawn(f2) #異步提交了f2任務 # g1.join() # g2.join() gevent.joinall([g1,g2]) print('主程序任務')