1.異常處理機制
2.多進程
引入多進程的庫文件: import multiprocessing
多進程測試, 需要在主函數 main 中 進行測試
創建進程的類:Process([group [, target [, name [, args [, kwargs]]]]]),target表示調用對象,args表示調用對象的位置參數元組。kwargs表示調用對象的字典。name為別名。group實質上不使用。
方法:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()啟動某個進程。
屬性:authkey、daemon(要通過start()設置)、exitcode(進程在運行時為None、如果為–N,表示被信號N結束)、name、pid。其中daemon是父進程終止后自動終止,且自己不能產生新進程,必須在start()之前設置
daemon 是守護進程 :daemon是父進程終止后自動終止,且自己不能產生新進程,必須在start()之前設置。#主線程執行完畢之后,不管子線程是否執行完畢都隨着主線程一起結束。
輸出:
使用多個進程訪問共享資源的時候,需要使用Lock 來避免訪問的沖突
輸出:
進程池
進程池 Pool
在利用Python進行系統管理的時候,特別是同時操作多個文件目錄,或者遠程控制多台主機,並行操作可以節約大量的時間。當被操作對象數目不大時,可以直接利用multiprocessing中的Process動態成生多個進程,十幾個還好,但如果是上百個,上千個目標,手動的去限制進程數量卻又太過繁瑣,
此時可以發揮進程池的功效。Pool可以提供指定數量的進程,供用戶調用,當有新的請求提交到pool中時,如果池還沒有滿,那么就會創建一個新的進程用來執行該請求;但如果池中的進程數已經達到規定最大值,
那么該請求就會等待,直到池中有進程結束,才會創建新的進程來它。
apply_async(func[, args[, kwds[, callback]]]) 它是非阻塞,apply(func[, args[, kwds]])是阻塞的
非阻塞和阻塞進程池
單個函數使用線程池:
輸出:
多個函數使用線程池
使用get() 函數,同樣可以獲取pandas 的數據結構;
輸出結果:
3.PyQt5 中的QTimer 模塊
pyqt5中的多線程的應用,多線程技術涉及3種方法,1.使用計時器QTimer, 2.使用多線程模塊QThread ,3.使用事件處理功能
1.使用QTimer模塊,創建QTimer實例,將timeout信號連接到槽函數,並調用timeout 信號。 self.timer.start(1000)時間為毫秒
引入模塊
from PyQt5.QtCore import QTimer, QDateTime
QThread模塊,使用該模塊開始一個線程,可以創建它的一個子類,然后覆蓋QThread.run() 的方法。調用自定義的線程時,調用start()方法,會自動調用run的方法,
QThread 還有 started , finished 信號,可以見信號連接到槽函數中
demo 2:
參考:


