cpu中計算的東西叫做 核心
乙個核 同一時刻 只能做一件事情
例子:把教室看做乙個cpu,教室中有乙個人,這個人看做 核心
並行:多個任務同時執行,真正的多工
併發:假的多工,依靠時間片輪詢,讓多個任務隨機分配時間執行
時間片輪詢機制:cpu給多個任務隨機分配執行時間去執行,
由於cpu執行速度非常快,以致於我們認為多個任務在同時執行
程序:乙個執行起來的程式就是程序
執行起來的程式:源** 以及 需要的資源(記憶體,攝像頭,麥克風等)
程序是系統分配資源的基本單位
多程序:多個執行起來的程式
執行緒:執行緒是程序的乙個例項,他是執行程式的最小單位
乙個程序中至少有乙個執行緒
執行緒是排程資源的基本單位
1.多執行緒及引數問題
#使用多執行緒
import threading
def sing(a):
for i in range(a):
print(i,"唱歌")
time.sleep(1)
def dance():
for i in range(5):
print(i,"跳舞")
time.sleep(1)
if __name__ == '__main__':
t1 = threading.thread(target=sing,args=(5,))
t2 = threading.thread(target=dance)
t1.start()
t2.start()
2.讓主線程等待子執行緒結束後再結束
t1.join() #主線程等待 子執行緒執行結束後再執行,
t2.join(9) # 引數:主線程等待子執行緒的最大時間
3.守護執行緒:子執行緒隨著主線程的結束而結束
t1.setdaemon(true)
t2.setdaemon(true)
4.獲取及設定主線程名字:
thr = threading.currentthread()
thr.setname("主線程")
na = thr.getname()
5.返回正在執行的執行緒列表:
tr_li = threading.enumerate()
tr_li[0].setname("新名字")
多個執行緒共享全域性變數
所有的資源都在程序中,多個執行緒大部分資料都是共享的程序中的資源
執行緒獨有的資源非常少
1.使用同步鎖解決多執行緒共享全域性變數
#建立乙個鎖物件
lock = threading.lock()
#加鎖lock.acquire()
#解鎖lock.release()
#使用多程序
import multiprocessing,time
#建立乙個子程序
p1 = multiprocessing.process(target=calculate,args=(5,))
p2 = multiprocessing.process(target=calculate,args=(6,))
建立子程序的時候會將主程序的資料複製乙份,作為子程序自己的資源
程序與程序之間的通訊,使用訊息佇列
特點:排隊,先進先出
如果使用列表實現佇列:
取第乙個 pop(0)
棧:先進後出
# 建立乙個佇列,引數:最多可以存幾個值,可以看做乙個先進先出的列表
que = multiprocessing.queue()
# 寫入佇列
que.put(i)
# 返回佇列大小
que.qsize()
# 獲取佇列
que.get()
cpu密集型 : cpu 一直在計算
io密集型 : 有阻塞
導包
import gevent
from gevent import monkey
# 將其他模組中的耗時操作轉換成 gevent 模組中的耗時操作
monkey.patch_all()
#建立協程:給主線程新增兩個任務
g1 = gevent.spawn(sing)
g2 = gevent.spawn(dance)
如果某個任務沒有耗時操作,則執行結束後再執行下乙個任務
讀取網頁內容
import urllib.request
url = ""
cont = urllib.request.urlopen(url)
img = cont.read()
Python 多工 程序 執行緒 協程
目錄程序建立 執行緒建立 協程建立 多程序 multiprocessing 多執行緒 threading 程序 執行緒多程序 多執行緒程序池 pool 執行緒池 threadpool 程序是資源分配的基本單位。執行緒是作業系統排程的單位。程序切換需要的資源很大,效率很低。執行緒切換需要的資源一般,效...
Python實現多工(協程 執行緒 程序)
from gevent import monkey import gevent import urllib.request monkey.patch all def my download url print get s url resp urllib.request.urlopen url dat...
python多工 執行緒 程序 協程 1
import time def sing 唱歌5秒鐘 for i in range 5 print 正在唱 雞你太美 time.sleep 1 def dance 跳舞5秒鐘 for i in range 5 print 正在跳 雞你太美 time.sleep 1 def main sing dan...