最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?threading中l(wèi)ock的使用詳解

 更新時(shí)間:2022年11月22日 11:19:30   作者:鍋爐房劉大爺  
Lock類(lèi)是threading中用于鎖定當(dāng)前線(xiàn)程的鎖定類(lèi),本文給大家介紹了Python?threading中l(wèi)ock的使用,需要的朋友可以參考下

在多線(xiàn)程中使用lock可以讓多個(gè)線(xiàn)程在共享資源的時(shí)候不會(huì)“亂”,例如,創(chuàng)建多個(gè)線(xiàn)程,每個(gè)線(xiàn)程都往空列表l中添加一個(gè)數(shù)字并打印當(dāng)前的列表l,如果不加鎖,就可能會(huì)這樣:

# encoding=utf8
import threading
import time
lock = threading.Lock()
l = []
 
def test1(n):
	lock.acquire()
	l.append(n)
	print l
	lock.release()
 
def test(n):
	l.append(n)
	print l
 
def main():
	for i in xrange(0, 10):
		th = threading.Thread(target=test, args=(i, ))
		th.start()
if __name__ == '__main__':
	main()

運(yùn)行結(jié)果:

[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3][
0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4[, 05, , 16, , 27, ]3
, 4, 5, 6[, 07, , 18, ]2
, 3, 4, [50, , 61, , 72, , 83, , 94], 
5, 6, 7, 8, 9]

因?yàn)槊總€(gè)線(xiàn)程都在同時(shí)往l中添加一個(gè)數(shù)字(當(dāng)前每個(gè)線(xiàn)程運(yùn)行的是test函數(shù)),然后又可能在同時(shí)打印l,所以最后的結(jié)果看起來(lái)會(huì)有些“混亂”。

下面讓每個(gè)線(xiàn)程調(diào)用“test1”函數(shù),看看結(jié)果如何:

[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

現(xiàn)在看起來(lái)就好多了,因?yàn)閠est1中每次像l中添加數(shù)字并打印之前,都先加了一把“鎖”,這樣就可以保證每次只有一個(gè)線(xiàn)程可以往l中添加數(shù)字,而不是同時(shí)往l里添加數(shù)字。

通過(guò)上面的結(jié)果比較可以知道,當(dāng)多線(xiàn)程中需要“獨(dú)占資源”的時(shí)候,要使用鎖來(lái)控制,防止多個(gè)線(xiàn)程同時(shí)占用資源而出現(xiàn)其他異常。

使用鎖的時(shí)候就調(diào)用acquire()方法,以此告訴其他線(xiàn)程,我正在占用該資源,你們要等會(huì);待使用資源后需要釋放資源的時(shí)候就調(diào)用release()方法,告訴其他線(xiàn)程,我已經(jīng)完成使用該資源了,其他人可以過(guò)來(lái)使用了。

python threading Lock

這篇文章主要是通過(guò)代碼說(shuō)明:

  • threading.Lock()不影響 multiprocessing
  • .threading.Lock()影響 threading.

代碼如下:

import threading
import time
from multiprocessing import Pool
_lock = threading.Lock()
def small_func(value):
    """
    添加線(xiàn)程鎖
    :param value:
    :return:
    """
    print(value)
    with _lock:
        time.sleep(5)
    return value
def no_small_func(value):
    """
    沒(méi)有線(xiàn)程鎖
    :param value:
    :return:
    """
    print(value)
    # with _lock:
    time.sleep(5)
    return value
def main():
    """
    multiprocessing 是基于進(jìn)程的,因此線(xiàn)程鎖對(duì)其不影響,
    :return:
    """
    st = time.time()
    p = Pool(processes=4)
    value = p.map(func=small_func, iterable=range(4))
    et = time.time()
    print(f"all use time: {et - st}")
    print(value)
def main2():
    """
    threading 受到 線(xiàn)程鎖 影響
    :return:
    """
    st = time.time()
    thread_list = []
    for temp_value in range(4):
        t = threading.Thread(target=small_func, args=(temp_value,))
        t.start()
        thread_list.append(t)

    for i in thread_list:
        i.join()

    et = time.time()
    print(f"all use time: {et - st}")
    # print(value)
def main3():
    st = time.time()
    thread_list = []
    res = []
    for temp_value in range(4):
        # 不加線(xiàn)程鎖就行了
        t = threading.Thread(target=no_small_func, args=(temp_value,))
        t.start()
        thread_list.append(t)

    for i in thread_list:
        v = i.join()
        res.append(v)

    et = time.time()
    print(f"all use time: {et - st}")
    print(res)
if __name__ == '__main__':
    # main()
    # main2()
    main3()

到此這篇關(guān)于Python threading中l(wèi)ock的使用的文章就介紹到這了,更多相關(guān)Python threading lock使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python批量創(chuàng)建變量并賦值操作

    python批量創(chuàng)建變量并賦值操作

    這篇文章主要介紹了python批量創(chuàng)建變量并賦值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python代碼調(diào)試的方法集錦

    Python代碼調(diào)試的方法集錦

    程序能一次寫(xiě)完并正常運(yùn)行的概率很小,基本不超過(guò)1%,總會(huì)有各種各樣的bug需要修正,有的bug很簡(jiǎn)單,看看錯(cuò)誤信息就知道,有的bug很復(fù)雜,因此,需要一整套調(diào)試程序的手段來(lái)修復(fù)bug,所以本文給大家介紹了Python代碼調(diào)試的方法集錦,需要的朋友可以參考下
    2025-03-03
  • 在Mac OS上搭建Python的開(kāi)發(fā)環(huán)境

    在Mac OS上搭建Python的開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了在Mac OS上搭建Apache服務(wù)器和Python解釋器的開(kāi)發(fā)環(huán)境,雖然Mac OS上自帶Python但往往難以滿(mǎn)足開(kāi)發(fā)者對(duì)版本的需求,需要的朋友可以參考下
    2015-12-12
  • Python基于Google?Bard實(shí)現(xiàn)交互式聊天機(jī)器人

    Python基于Google?Bard實(shí)現(xiàn)交互式聊天機(jī)器人

    這篇文章主要為大家介紹了Python基于Google?Bard實(shí)現(xiàn)交互式聊天機(jī)器人示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • python兩種注釋用法的示例

    python兩種注釋用法的示例

    這篇文章主要介紹了python兩種注釋用法的示例,幫助大家開(kāi)始學(xué)習(xí)和使用python 注釋?zhuān)信d趣的朋友可以了解下
    2020-10-10
  • python文件讀寫(xiě)并使用mysql批量插入示例分享(python操作mysql)

    python文件讀寫(xiě)并使用mysql批量插入示例分享(python操作mysql)

    這篇文章主要介紹了python文件讀寫(xiě)并使用mysql批量插入示例,可以學(xué)習(xí)到python操作mysql數(shù)據(jù)庫(kù)的方法,需要的朋友可以參考下
    2014-02-02
  • Python爬蟲(chóng)Scrapy框架CrawlSpider原理及使用案例

    Python爬蟲(chóng)Scrapy框架CrawlSpider原理及使用案例

    這篇文章主要介紹了Python爬蟲(chóng)Scrapy框架(CrawlSpider),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SecureCRTSecure7.0查看連接密碼的步驟

    SecureCRTSecure7.0查看連接密碼的步驟

    SecureCRTSecure7密碼查看的方法大概可以分為兩個(gè)步驟,第一步需要查看系統(tǒng)保存的連接的ini文件,第二步破解加密之后的密碼,具體腳本請(qǐng)參考下本文
    2021-06-06
  • 解決Python中定時(shí)任務(wù)線(xiàn)程無(wú)法自動(dòng)退出的問(wèn)題

    解決Python中定時(shí)任務(wù)線(xiàn)程無(wú)法自動(dòng)退出的問(wèn)題

    今天小編就為大家分享一篇解決Python中定時(shí)任務(wù)線(xiàn)程無(wú)法自動(dòng)退出的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 在matlab中創(chuàng)建類(lèi)似字典的數(shù)據(jù)結(jié)構(gòu)方式

    在matlab中創(chuàng)建類(lèi)似字典的數(shù)據(jù)結(jié)構(gòu)方式

    這篇文章主要介紹了在matlab中創(chuàng)建類(lèi)似字典的數(shù)據(jù)結(jié)構(gòu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論

建宁县| 开封市| 南通市| 滨州市| 芮城县| 若尔盖县| 屏东市| 濮阳县| 县级市| 台东市| 攀枝花市| 济源市| 卢氏县| 汉源县| 汕尾市| 通州市| 白玉县| 中西区| 曲靖市| 内丘县| 新兴县| 台州市| 濮阳县| 城固县| 农安县| 福海县| 郑州市| 大余县| 郁南县| 黎川县| 和田县| 府谷县| 昌江| 盐城市| 祁阳县| 黄龙县| 广宁县| 舞阳县| 内丘县| 仁怀市| 邵武市|