python多任務基礎

1.多任務:兩個程序段同時運行2.爲某個函數建立線程並啓動:    import threading    線程名 = threading.Thread(target = 函數名,args = 參數元組)   #建立線程對象,並非真正的線程,target    線程名.start()   #執行線程  此時線程真正建立並能夠被調度執行3.線程結束的標誌:建立線程時的target函數執行完畢4.程序執行時默認會有一個主線程,負責整個程序主體的執行,主線程在全部子線程結束之後才能結束5.爲一個類建立線程:    定義一個類繼承自threading.Thread    在其中實現run方法,該方法中的代碼是要放在線程中執行的    想爲其建立線程時,先實例化該類(至關於實例化一個線程對象,並不是真正的線程),而後用實例名調用start()方法(此時纔是真正建立線程交由os調度)6.在函數中對全局變量進行修改時,到是否使用global取決因而否對全局變量的指向進行了修改:        若是修改了指向,讓全局變量指向了別處,那麼必須使用global,不然不加gloabal7.建立線程時若目標函數有參數,建立線程對象時,除了target參數,還有args參數(函數參數元組)8.多線程共享全局變量9.實現同步和互斥的方法:    用threading.lock()實例化一個鎖    在須要的代碼先後分別添    鎖.acpuire()和 鎖.release.()    在二者之間的代碼執行具備原子性(即要麼執行要麼不執行)    鎖的概念能夠理解爲操做系統中的信號量10.多線程對共享資源的訪問可能會致使死鎖,解決方法:    1.添加超時時間    2.銀行家算法11.進程和程序的區別:簡單理解,一個動態一個靜態:進程是運行狀態的程序+佔用的資源12.進程的狀態 :主要三種  就緒 運行 堵塞13.實現多任務方式:線程、進程、協程14.進程建立步驟:    實例名 = multipleporcessing.Porcess()  實例化一個Process對象    實例.start()     建立進程並交由OS調度15.進程也分爲主進程子進程之分16.每建立一個進程,就將主程序的資源也複製到子進程,所以建立多個新進程的資源耗費很大,當子進程不改變程序代碼時多個子進程能夠共享一份代碼。17.進程和線程的簡單對比   進程是資源分配的基本單位,多線程是執行的基本單位。    功能:前者例如一臺電腦上開多個QQ   後者例如一個QQ的多個聊天窗口18.進程間通訊的一種重要方式:隊列 queue (能夠實現程序的解耦)  實現進程間數據共享19.進程池Pool  預先建立必定數目的進程,爲多個任務動態動態分配進程來執行  通常用來處理任務數量不肯定的狀況,任務數量少且肯定的狀況使用傳統方法            特色:重複利用進程池的進程作任務20.進程池使用方法:    from multiprocessing import Pool    建立進程池實例                                                      實例名 =  Pool(進程池數目)    在須要的時候爲要執行的函數分配進程                                  實例名.apply_async(函數名,參數元組)           (分配時不須要考慮進程池的進程被佔用完的狀況,須要的時候儘管調用語句,系統會自動管理和實現(自動阻塞和自動調用) )    在不須要爲建立多任務時關閉進程池   實例名.close()    主進程等待全部子進程執行完成       實例名.join()21.進程池使用注意:使用進程池時,主進程未必會等待進程池中的進程執行完畢,全部要想讓進程池完成全部任務,必須在進程池進程分配完畢以後調用join()方法22.isinstance(對象,類)  判斷一個對象是不是一個類的實例。23.可迭代對象的簡單理解:可使用for來遍歷元素的對象,實現了__iter__()方法    迭代器的簡單理解:能夠經過next()方法獲取下一個值的對象,實現了__iter__()和__next__()方法    迭代器必定是一個可迭代對象24.自定義可迭代對象:類中實現__iter__方法,該方法返回一個迭代器,該類的實例化對象就是一個可迭代對象25.自定義迭代器:在類中實現__next__方法,返回每次迭代的值。迭代器不存儲所有數據,只存儲獲得數據的方法,而後實現__iter__()方法,返回self   在實現可迭代方式時,能夠迭代器和迭代對象分開實現,也能夠直接實現迭代器便可26. 經過可迭代對象的__iter__()方法獲得迭代器,每次循環時調用next(返回的迭代器)獲得下一個迭代值28. next(可迭代對象)方法的實質;調用傳入的對象的__next__()方法29.生成器:一種特殊的迭代器,只保留生成數據的算法,不存儲全部的數據,可使用for循環和next方法調用29.生成器的兩種實現方式:    1.經過yield返回值的函數,此時該函數就成了一個生成器建立函數,經過變量名 = 函數(參數)的方式生成一個生成器    2.生成器推導式  (含有i的公式 for i in 可迭代對象)30.yield語句能夠賦給一個變量即 變量名 = yield 變量,經過生成器.send(變量)的方式,能夠設置yield語句複製給的變量的內容31.生成器做用:讓函數返回部分語句的執行結果,並能夠繼續執行剩餘的語句32.經過yield能夠實現多個任務交替執行33.greenlet是對yield的進一步封裝,,可以管理多任務的執行34.效率:協程高於多線程高於多進程35.通常使用gevent實現協程
相關文章
相關標籤/搜索