Python 多工,程序 執行緒 協程

2021-10-25 03:58:46 字數 2487 閱讀 3308

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...