欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python進(jìn)程鎖Lock的定義-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、碧江網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為碧江等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

本篇文章為大家展示了Python進(jìn)程鎖Lock的定義,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

Lock

多線程和多進(jìn)程大的不同在于,多進(jìn)程中,同一個變量,各自有一份拷貝存在于每個進(jìn)程中,互不影響,而多線程中,所有變量都由所有線程共享,所以,任何一個變量都可以被任何一個線程修改,因此,線程之間共享數(shù)據(jù)大的危險在于多個線程同時修改一個變量,把內(nèi)容給改亂了。

來看看多個線程同時操作一個變量怎么把內(nèi)容給改亂了:

# _*_ coding:utf-8 _*_
import time, threading
# 假定這是你銀行的存款
balance = 0
def change_it(n):
    # 先存后取,結(jié)果應(yīng)該是0
    global balance
    balance = balance + n
    balance = balance - n
    print balance
def run_thread(n):
    for i in range(100000):
        change_it(n)
t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)

我們定義了一個共享變量balance,初始值為0,并且啟動兩個線程,先存后取,理論上結(jié)果應(yīng)該為0,但是,由于線程的調(diào)度是由操作系統(tǒng)決定的,當(dāng)t1、t2交替執(zhí)行時,只要循環(huán)次數(shù)足夠多,balance的結(jié)果就不一定是0了。

實際執(zhí)行效果:

$ python thread_share_var.py
31
$ python thread_share_var.py
42
$ python thread_share_var.py
-6
$ python thread_share_var.py
0
$ python thread_share_var.py
7
$ python thread_share_var.py
13

究其原因,是因為修改balance需要多條語句,而執(zhí)行這幾條語句時,線程可能中斷,從而導(dǎo)致多個線程把同一個對象的內(nèi)容改亂了。

兩個線程同時一存一取,就可能導(dǎo)致余額不對,你肯定不希望你的銀行存款莫名其妙地變成了負(fù)數(shù),所以,我們必須確保一個線程在修改balance的時候,別的線程一定不能改。

如果我們要確保balance計算正確,就要給change_it()上一把鎖,當(dāng)某個線程開始執(zhí)行change_it()時,我們說,該線程因為獲得了鎖,因此其他線程不能同時執(zhí)行change_it(),只能等待,直到鎖被釋放后,獲得該鎖以后才能改。由于鎖只有一個,無論多少線程,同一時刻最多只有一個線程持有該鎖,所以,不會造成修改的沖突。創(chuàng)建一個鎖就是通過threading.Lock()來實現(xiàn):

balance = 0
lock = threading.Lock()
def run_thread(n):
    for i in range(100000):
        # 先要獲取鎖:
        lock.acquire()
        try:
            # 放心地改吧:
            change_it(n)
        finally:
            # 改完了一定要釋放鎖:
            lock.release()

加鎖以后實現(xiàn)的實際效果:

$ python thread_share_var.py
0
$ python thread_share_var.py
0
$ python thread_share_var.py
0

當(dāng)多個線程同時執(zhí)行l(wèi)ock.acquire()時,只有一個線程能成功地獲取鎖,然后繼續(xù)執(zhí)行代碼,其他線程就繼續(xù)等待直到獲得鎖為止。

獲得鎖的線程用完后一定要釋放鎖,否則那些苦苦等待鎖的線程將永遠(yuǎn)等待下去,成為死線程。所以我們用try...finally來確保鎖一定會被釋放。

鎖的好處就是確保了某段關(guān)鍵代碼只能由一個線程從頭到尾完整地執(zhí)行,壞處當(dāng)然也很多,首先是阻止了多線程并發(fā)執(zhí)行,包含鎖的某段代碼實際上只能以單線程模式執(zhí)行,效率就大大地下降了。其次,由于可以存在多個鎖,不同的線程持有不同的鎖,并試圖獲取對方持有的鎖時,可能會造成死鎖,導(dǎo)致多個線程全部掛起,既不能執(zhí)行,也無法結(jié)束,只能靠操作系統(tǒng)強制終止。

上述內(nèi)容就是Python進(jìn)程鎖Lock的定義,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

分享題目:Python進(jìn)程鎖Lock的定義-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://aaarwkj.com/article48/ccdiep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、用戶體驗、網(wǎng)站策劃建站公司、網(wǎng)站內(nèi)鏈網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
五月综合丁香婷婷久久| 色婷婷综合激情一区二区| 日韩精品在线观看一| 国产午夜福利不卡在线观看| 久久精品人妻一区二区| 中文字幕一区二区中文字幕| 少妇一夜一次一区二区| 抱着操才爽的免费视频观看| 把熟睡的少妇弄到高潮| 日韩精品中文女同在线播放| 国产人妖cd蜜雅丝袜美女| 国产精品一区二在线观看| 加勒比久久精品网址系列| 日韩人妻中文字幕专区| 麻豆av永久地址久久精品| 欧美日韩国产这里只有精品| 午夜久久精品国产亚洲av| 久久精品免费激情视频| 91精品一久久香蕉国产| 扒开少妇毛茸茸的大荫萍蒂| 日本高清加勒比免费在线| 日本一级黄色影视大全| 欧美日韩在线视频一区| 国产精品久久久99| 免费国产成人在线视频| 久激情内射婷内射蜜桃| 中文字幕日韩欧美第一页| 午夜性生活视频免费看| 亚洲精品av一区二区久久| 国产精品亚洲在线视频| 国产日韩欧美在线精品| 黄色午夜福利在线观看| 欧美一区二区三在线| 亚洲av成人三区国产精品| 欧美激情亚洲一区二区| 亚洲国产日韩精品av| 亚洲av第一区综合激情久久久| 国产三级网站在线观看播放| 欧美一区二区精品网站 | 欧美精品在,欧美一区二区| 精品一二三四五区亚洲乱码|