python併發線程那些事

 在python中併發是指一次處理多件事,而並行是指一次做多件事。也可以理解爲在做事情時,或者計算機的資源需要處理時,在此時刻計算機需要處理資源時而把人做事情映射成計算機工作時可以或者互不干擾處理資源,這也就反射出貌似同步和異步處理時,這就是並行,而併發時計算機的資源需要處理時,在此時刻內具體負責處理的工作或事情,強調的是具體,某個時段內要做的工作,一個可以看做廣度,這個可以看做深度,而此時併發處理的資源多了起來,很多的在此時高併發也就衍生出來了。
     併發的解決方案有幾下幾種:
     1,隊列,緩衝區,
                 隊列先進先出,計算機排順序的處理資源,
                 緩衝區,資源處理前有一個緩衝地帶可以處理時

        2,爭搶,
                    資源需要處理時被某個程序也好,還是什麼的東西,反正就是此資源被鎖定了資源,而其他就只能繼續等待這個資源值了,直到此資源被釋放了在重新使用或運行等等。而爭搶的模式的弊端在於一旦佔據資源時導致其他得不到這個資源,也可能存在資源的浪費等等。
        3,預處理,
            資源值來臨前需要提前需要預加載,預先做好一部分工作,如手機的緩存的功能等
        4,提速,
                    加強提高處理資源的工具,處理器cpu不行了,4核不夠上8核,內層不夠,8g ,16,32g等
        5,消息中間件
                    這個不同於緩衝,中間件常見的有RabbitMQ、ActiveMQ(Apache)、RocketMQ(阿里Apache)、kafka(Apache),反正就是買服務啦,第三方雲等等。

線程

python併發線程那些事

            上面圖片中此電腦中線程進程可以看一下,是指進程程對計算機程序中資源的分配和調度和使用,線程可以看做輕量級進程,包含在進程之內,線程存在就緒,運行,阻塞,終止四種狀態。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時運行該線程函數,並沒有啓動一個新線程,只是一個普通函數而已。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章