Python多任務

  1. 多任務
    什麼是多任務
            同時做多件事件(做個多個任務),運行多個方法
    多任務的原理
          併發:假的多任務,時間片的輪轉,快速的交替運行任務
          並行:真的多任務,一個核處理一個任務
    實現多任務的三種方式
         線程
         進程
         協程

  • 線程

概念:程序執行的最小單位,依賴於進程
特點
程序運行起來,就給它創建了一個主線程,等待子線程結束後再結束
共享全局變量,通過args參數給線程傳遞數據
從系統開銷講,進程>線程>協程
互斥鎖
       主要解決了資源競爭的問題
使用互斥鎖最主要注意:死鎖問題
原因:兩個線程都在等待對方釋放鎖
解決方案:
寫代碼設計的時候避免
設置超時時間
銀行家算法

進程
概念:它是代碼和資源的集合,分配資源的最小單位,可以在任務列表中查看進程
特點
        程序運行起來,就會給其創建一個主進程,等待子進程結束後,再結束
進程調用start()方法後就進入了運行態
寫時拷貝處理數據,通過args給進程傳遞數據
從系統開銷講,進程>線程>協程
進程間通信使用Queue
作用:多個進程之間傳遞數據
寫法
創建隊列對象q=multiprocessing.Queue()
一個進程給隊列中放消息q.put()
另一個進程從隊列中去消息q.get()
進程池
爲什麼要用進程池?
減少了創建、銷燬進程的次數,從而提交效率
原理
一次性在進程池中創建多條進程,循環着去使用
寫法
創建進程池po=multiprocessing.Pool()
加入任務 po.aplay_async()
關閉po.close
應用場景
任務比較多的時候
不知道有多少個任務的時候

  • 協程
    什麼是可迭代對象
    一個普通的對象實現了iter內置函數
    什麼是迭代器
    一個普通的對象實現了iternext內置函數
    迭代器的特點
    保存的是生成數據的方式,而不直接存儲數據
    好處:節省系統空間
    什麼是生成器
    它是一個特殊的迭代器
    yield
    一個普通的函數裏面寫了yield的話,他就是一個生成器模板
    執行函數遇到yield會阻塞
    調用next()或者send()會解阻塞
    利用yield做協程
    寫多個函數,每個函數中都寫yield,函數執行時遇到yield就會阻塞
    然後交替着題調用不同任務的next()方法,這樣就用協程實現了多任務
    原理:
    利用線程的空閒時間去執行其他的任務
    特點:
    協程依賴於線程,線程依賴進程
    從系統開銷講,進程>線程>協程
    實現協程的三種方式
    yield next() send()
    greenlet
    gevent
    gevent.spawn(函數名).join()
    gevent.joinall([gevent.spawn(函數名)])

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章