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實現協程