一、多執行緒
在python中,多執行緒庫為threading.
建立乙個執行緒物件
importthreading as td
import
time
defcountnum(n):
print("
running on number:%s
"%n)
time.sleep(3)
if__name__=='
__main__':
t1=td.thread(target=countnum,args=(23,)) #函式不能加括號,args引數只有乙個時後面要加逗號
t2= td.thread(target=countnum, args=(14,))
t1.start()
t2.start()
print("
ending
")
thread例項物件的方法:
isalive() #返回執行緒是否活動
getname() #返回執行緒名
setname() #設定執行緒名
threading模組提供的一些方法:
threading.currentthread() #返回當前的執行緒變數
threading.enumerate() #返回乙個包含正在執行的執行緒的list
threading.activatecount() #返回正在執行的執行緒數量
無論有多少個cpu,python在執行乙個程序時,同一時刻只能允許乙個執行緒執行。
因此python無法利用多核cpu實現多執行緒。
同步鎖(lock)
鎖通常被用來實現對共享資源的同步訪問。為每乙個共享資源建立乙個lock物件,當你需要訪問該資源時,呼叫acquire方法來獲取鎖物件(如果其它執行緒已經獲得了該鎖,則當前執行緒需等待其被釋放),待資源訪問完後,再呼叫release方法釋放鎖:
importthreading
r=threading.lock()
r.acquire()
'''公共資料的操作
'''r.release()
佇列
importqueue
q=queue.queue(maxsize=10) #
若小於1,則佇列長度無限
q.put(10) #
呼叫佇列物件的put()方法在對尾插入乙個專案
q.get() #
呼叫佇列物件的get()方法從隊頭刪除並返回乙個專案
q.task_done() #
表示某個任務完成,每一條get語句後需要一條task_done
q.join() #
阻塞程序,直到所有任務完成.即等到隊列為空時,再執行別的操作
q.qsize() #
返回佇列大小
q.empty() #
當隊列為空時返回true
q.full() #
當隊列為滿時返回true
python的queue模組中有三種佇列即建構函式
fifo(先進先出),lifo(先進後出),priorityqueue優先順序佇列
二、多程序
multiprocessing包是python中的多程序管理包。與threading.thread類似,它可以利用multiprocessing.process物件來建立乙個程序。該程序可以執行在python程式內部編寫的函式。該process物件與thread物件的用法相同,也有start(), run(), join()的方法。此外multiprocessing包中也有lock/event/semaphore/condition類 (這些物件可以像多執行緒那樣,通過引數傳遞給各個程序),用以同步程序,其用法與threading包中的同名類一致。
程序池程序池內部維護乙個程序序列,當使用時,去程序池中獲取乙個程序,如果程序池序列中沒有可供使用的程序,那麼程式就會等待,直到程序池中有可用程序為止。
程序池的幾個重要方法:
terminate:立刻關掉執行緒池
join:主程式等待所有子程式執行完畢
close:等所有程序結束後關閉程序池
多程序和多執行緒
嵌入式linux中文站,關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有那麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有xdjm問 多程序好還是多執行緒好?linux下...
多執行緒和多程序
首先說什麼是程序,載入記憶體中執行的程式,它就是乙個程序,而這個程式中執行的某個子任務就是乙個執行緒,程式包含了執行緒。程序對於執行緒是唯一的,而乙個程序可以有多個執行緒。程式執行的時候每隔一定時間在多執行緒之間執行,比如第乙個執行緒執行到0.01秒,馬上暫停跳到下乙個執行緒開始執行,又執行到0.0...
多程序和多執行緒
一 python 中多程序的使用 1 使用multiprocessing p process target function,args 引數,p.start 含義啟動程序 p.join 含義是等待子程序結束後在繼續執行 2 如果啟動大量的子程序,可以用程序池的方式批量建立子程序 from multi...