您好,登錄后才能下訂單哦!
在python中并發是指一次處理多件事,而并行是指一次做多件事。也可以理解為在做事情時,或者計算機的資源需要處理時,在此時刻計算機需要處理資源時而把人做事情映射成計算機工作時可以或者互不干擾處理資源,這也就反射出貌似同步和異步處理時,這就是并行,而并發時計算機的資源需要處理時,在此時刻內具體負責處理的工作或事情,強調的是具體,某個時段內要做的工作,一個可以看做廣度,這個可以看做深度,而此時并發處理的資源多了起來,很多的在此時高并發也就衍生出來了。
并發的解決方案有幾下幾種:
1,隊列,緩沖區,
隊列先進先出,計算機排順序的處理資源,
緩沖區,資源處理前有一個緩沖地帶可以處理時
2,爭搶,
資源需要處理時被某個程序也好,還是什么的東西,反正就是此資源被鎖定了資源,而其他就只能繼續等待這個資源值了,直到此資源被釋放了在重新使用或運行等等。而爭搶的模式的弊端在于一旦占據資源時導致其他得不到這個資源,也可能存在資源的浪費等等。
3,預處理,
資源值來臨前需要提前需要預加載,預先做好一部分工作,如手機的緩存的功能等
4,提速,
加強提高處理資源的工具,處理器cpu不行了,4核不夠上8核,內層不夠,8g ,16,32g等
5,消息中間件
這個不同于緩沖,中間件常見的有RabbitMQ、ActiveMQ(Apache)、RocketMQ(阿里Apache)、kafka(Apache),反正就是買服務啦,第三方云等等。
線程
上面圖片中此電腦中線程進程可以看一下,是指進程程對計算機程序中資源的分配和調度和使用,線程可以看做輕量級進程,包含在進程之內,線程存在就緒,運行,阻塞,終止四種狀態。python中線程使用threaing庫,
導入threading庫即可。
import threading
def a():
print("111111111111")
print("2222222222222222")
t = threading.Thread(target=a, name='worker') # 線程對象
t.start() #線程啟動
在此創建了一個線程對象,target是目標函數,名稱等,調用時需要啟動start,python并沒有線程退出的方案,要么繼續執行完畢,或者拋出異常,
import threading
import time
def worker():
count = 0
while True:
if (count > 5):
# raise RuntimeError(count) #拋出
# return
break
time.sleep(1)
print("I'm work------")
count += 1
t = threading.Thread(target=worker, name='worker')
t.start()
print('==End==')
線程如何傳參,
import threading
import time
def add(x, y):
print('{} + {} = {}'.format(x, y, x + y, threading.current_thread().ident))
thread1 = threading.Thread(target=add, name='add', args=(4, 5))
thread1.start()
time.sleep(2)
thread2 = threading.Thread(target=add, name='add', args=(5,), kwargs={'y': 4})
thread2.start()
time.sleep(2)
thread3 = threading.Thread(target=add, name='add', kwargs={'x': 4, 'y': 5})
thread3.start()
線程的屬性和方法:
在此有了start和run的方法,start和run就是start啟動線程時每一個線程需要執行該方法一次,啟動了一個新線程,而run時運行該線程函數,并沒有啟動一個新線程,只是一個普通函數而已。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。