国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python多線程Thread——生產(chǎn)者消費(fèi)者模型 python隊(duì)列與多線程——生產(chǎn)者消費(fèi)者模型

這篇具有很好參考價(jià)值的文章主要介紹了Python多線程Thread——生產(chǎn)者消費(fèi)者模型 python隊(duì)列與多線程——生產(chǎn)者消費(fèi)者模型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

import random
import threading
import time

# Lock = threading.Lock()  # 創(chuàng)建一個(gè)線程鎖。Lock.acquire()表示鎖住,線程進(jìn)入阻塞(暫停)。Lock.release()表示釋放(線程繼續(xù))

books = 10  # 圖書館書籍?dāng)?shù)量
b_rt = 0  # 外面持有數(shù)量(借出去的數(shù)量)
day = 0  # 計(jì)算天數(shù)


# 圖書館向外租借書
def rent_book():
    global b_rt, books
    Lock = threading.Lock()  # 建鎖
    locked = False  # 判斷是否鎖住,初始未加鎖
    while True:
        time.sleep(1)
        check = True if books > 0 else False  # 判斷是否有書
        if not check:  # 沒書
            print('圖書館沒有書了')
            if not locked:  # 沒書還未加鎖的話,加鎖
                Lock.acquire()
                locked = True
            continue  # 沒有書跳過本次循環(huán)(不管有沒有加鎖)
        if check and locked:  # 加鎖肯定沒書。所以如果有書且加鎖了,可以解鎖
            Lock.release()
            locked = False
        n = random.randint(1, books) if books > 1 else 1
        n = books if books < n else n
        books -= n
        b_rt += n
        print(f"借出去了{(lán)n}本,還剩{books},外面{b_rt}")


# 外面持有書籍歸還圖書館
def return_book():
    global b_rt, books
    Lock = threading.Lock()
    locked = False
    while True:
        time.sleep(2)
        check = True if b_rt > 0 else False
        if not check:
            if not locked:
                Lock.acquire()
                locked = True
            continue
        if check and locked:
            Lock.release()
            locked = False
        m = random.randint(1, b_rt) if b_rt > 1 else 1
        books += m
        b_rt -= m
        print(f"歸還{m}本,還剩{books},外面{b_rt}")


# 圖書館隔段時(shí)間會(huì)補(bǔ)充一本
def buyabook():
    global books, day
    day += 1
    print(f"這是第{day}天:\t圖書館有書{books}本\t", end="")
    books += 1
    print("進(jìn)書1本")
    t = threading.Timer(10, buyabook)
    # Timer對(duì)象第一個(gè)參數(shù)是step間隔,第二個(gè)是方法(在方法內(nèi)可以是方法本身)
    t.start()  # 表示調(diào)用一次函數(shù)會(huì)單獨(dú)啟用一個(gè)線程


t1 = threading.Thread(target=rent_book, args=())  # 創(chuàng)建借書線程
t2 = threading.Thread(target=return_book, args=())  # 創(chuàng)建還書線程
# threading.Thread(target=func, args=()) 中target是方法,args是方法的元組形式的參數(shù),
buyabook()  # Timer任務(wù)會(huì)獨(dú)立啟用一個(gè)線程
t1.start()
t2.start()

下面面向?qū)ο蟮慕嵌瓤淳€程

import threading
import time


# 創(chuàng)建一個(gè)線程類
class Eat(threading.Thread):
    def __init__(self, name, s: int):
        # 類繼承要注意super函數(shù),這里的target可以不寫,默認(rèn)是run。目的是線程啟動(dòng)調(diào)用的是run方法
        super(Eat, self).__init__(target=self.run)
        self.name = name
        self.s = s  # 定義一個(gè)時(shí)間間隔
        self.flag = False  # 定義一個(gè)標(biāo)記(線程結(jié)束標(biāo)記)

    def run(self):  # 構(gòu)建主函數(shù)。線程啟動(dòng)后運(yùn)行的是此方法
        while True:
            time.sleep(self.s)
            print(f"{self.name}在吃飯")
            if self.flag:  # 標(biāo)記為True結(jié)束線程
                break

    def stop(self):  # 定義個(gè)方法設(shè)置標(biāo)記為True
        self.flag = True
        print("線程終止")


if __name__ == '__main__':
    aron = Eat("aron", 2)
    aron.start()  # 線程啟動(dòng)后會(huì)持續(xù)運(yùn)行
    # 再實(shí)例一個(gè)線程
    lily = Eat("lily", 1)
    lily.start()
    # 所有線程都運(yùn)行再一個(gè)進(jìn)程上,他們單獨(dú)運(yùn)行互不影響。除非他們調(diào)用了進(jìn)程上的公共屬性
    # 比如你可以把時(shí)間設(shè)置為進(jìn)程上的一個(gè)變量,例如:
    # step = 2
    # aron = Eat("aron", step)
    # lily = Eat("lily", step)
    print("線程啟動(dòng)后會(huì)獨(dú)立于主線程")  # 線程啟動(dòng)后會(huì)獨(dú)立于主線程。下面的內(nèi)容是獨(dú)立于被啟動(dòng)的兩個(gè)線程的
    time.sleep(5)
    aron.stop()
    lily.stop()

那么你可以試試看能不能用面向?qū)ο蟮姆椒▽?shí)現(xiàn)生產(chǎn)者消費(fèi)者模型吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-702410.html

python隊(duì)列與多線程——生產(chǎn)者消費(fèi)者模型

到了這里,關(guān)于Python多線程Thread——生產(chǎn)者消費(fèi)者模型 python隊(duì)列與多線程——生產(chǎn)者消費(fèi)者模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 線程同步--生產(chǎn)者消費(fèi)者模型--單例模式線程池

    線程同步--生產(chǎn)者消費(fèi)者模型--單例模式線程池

    條件變量是 線程間共享的全局變量 ,線程間可以通過條件變量進(jìn)行同步控制 條件變量的使用必須依賴于互斥鎖以確保線程安全,線程申請(qǐng)了互斥鎖后,可以調(diào)用特定函數(shù) 進(jìn)入條件變量等待隊(duì)列(同時(shí)釋放互斥鎖) ,其他線程則可以通過條件變量在特定的條件下喚醒該線程( 喚醒后線

    2024年01月20日
    瀏覽(22)
  • C#多線程學(xué)習(xí)(三) 生產(chǎn)者和消費(fèi)者

    線程學(xué)習(xí)第一篇: C#多線程學(xué)習(xí)(一) 多線程的相關(guān)概念 線程學(xué)習(xí)第二篇: C#多線程學(xué)習(xí)(二) 如何操縱一個(gè)線程 前面說過,每個(gè)線程都有自己的資源,但是代碼區(qū)是共享的,即每個(gè)線程都可以執(zhí)行相同的函數(shù)。這可能帶來的問題就是幾個(gè)線程同時(shí)執(zhí)行一個(gè)函數(shù),導(dǎo)致數(shù)據(jù)的混

    2023年04月21日
    瀏覽(21)
  • 線程池-手寫線程池C++11版本(生產(chǎn)者-消費(fèi)者模型)

    線程池-手寫線程池C++11版本(生產(chǎn)者-消費(fèi)者模型)

    本項(xiàng)目是基于C++11的線程池。使用了許多C++的新特性,包含不限于模板函數(shù)泛型編程、std::future、std::packaged_task、std::bind、std::forward完美轉(zhuǎn)發(fā)、std::make_shared智能指針、decltype類型推斷、std::unique_lock鎖等C++11新特性功能。 本項(xiàng)目有一定的上手難度。推薦參考系列文章 C++11實(shí)用技

    2024年02月13日
    瀏覽(26)
  • JavaEE 初階篇-生產(chǎn)者與消費(fèi)者模型(線程通信)

    JavaEE 初階篇-生產(chǎn)者與消費(fèi)者模型(線程通信)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ? 文章目錄 ? ? ? ? 1.0 生產(chǎn)者與消費(fèi)者模型概述 ? ? ? ? 2.0?在生產(chǎn)者與消費(fèi)者模型中涉及的關(guān)鍵概念 ? ? ? ? 2.1 緩沖區(qū) ? ? ? ? 2.2 生產(chǎn)者 ? ? ? ? 2.3 消費(fèi)者 ? ? ? ? 2.4 同步機(jī)制 ? ? ? ? 2.5 線程間通

    2024年04月28日
    瀏覽(31)
  • 探究:kafka生產(chǎn)者/消費(fèi)者與多線程安全

    探究:kafka生產(chǎn)者/消費(fèi)者與多線程安全

    目錄 1. 多線程安全 1.1. 生產(chǎn)者是多線程安全的么? 1.1. 消費(fèi)者是多線程安全的么? 2. 消費(fèi)者規(guī)避多線程安全方案 2.1. 每個(gè)線程維護(hù)一個(gè)kafkaConsumer 2.2. [單/多]kafkaConsumer實(shí)例 + 多worker線程 2.3.方案優(yōu)缺點(diǎn)對(duì)比 ????????Kafka生產(chǎn)者是 線程安全 的,可以在多個(gè)線程中共享一個(gè)

    2023年04月26日
    瀏覽(23)
  • 多線程(初階七:阻塞隊(duì)列和生產(chǎn)者消費(fèi)者模型)

    多線程(初階七:阻塞隊(duì)列和生產(chǎn)者消費(fèi)者模型)

    目錄 一、阻塞隊(duì)列的簡(jiǎn)單介紹 二、生產(chǎn)者消費(fèi)者模型 1、舉個(gè)栗子: 2、引入生產(chǎn)者消費(fèi)者模型的意義: (1)解耦合 (2)削峰填谷 三、模擬實(shí)現(xiàn)阻塞隊(duì)列 1、阻塞隊(duì)列的簡(jiǎn)單介紹 2、實(shí)現(xiàn)阻塞隊(duì)列 (1)實(shí)現(xiàn)普通隊(duì)列 (2)加上線程安全 (3)加上阻塞功能 3、運(yùn)用阻塞隊(duì)列

    2024年02月05日
    瀏覽(20)
  • 【linux】線程同步+基于BlockingQueue的生產(chǎn)者消費(fèi)者模型

    【linux】線程同步+基于BlockingQueue的生產(chǎn)者消費(fèi)者模型

    喜歡的點(diǎn)贊,收藏,關(guān)注一下把! 在線程互斥寫了一份搶票的代碼,我們發(fā)現(xiàn)雖然加鎖解決了搶到負(fù)數(shù)票的問題,但是一直都是一個(gè)線程在搶票,它錯(cuò)了嗎,它沒錯(cuò)但是不合理。那我們應(yīng)該如何安全合理的搶票呢? 講個(gè)小故事。 假設(shè)學(xué)校有一個(gè)VIP學(xué)霸自習(xí)室,這個(gè)自習(xí)室有

    2024年02月03日
    瀏覽(24)
  • C# 快速寫入日志 不卡線程 生產(chǎn)者 消費(fèi)者模式

    C# 快速寫入日志 不卡線程 生產(chǎn)者 消費(fèi)者模式

    有這樣一種場(chǎng)景需求,就是某個(gè)方法,對(duì)耗時(shí)要求很高,但是又要記錄日志到數(shù)據(jù)庫便于分析,由于訪問數(shù)據(jù)庫基本都要幾十毫秒,可在方法里寫入BlockingCollection,由另外的線程寫入數(shù)據(jù)庫。 可以看到,在我的機(jī)子上面,1ms寫入了43條日志。

    2024年02月15日
    瀏覽(22)
  • 線程池-手寫線程池Linux C簡(jiǎn)單版本(生產(chǎn)者-消費(fèi)者模型)

    線程池-手寫線程池Linux C簡(jiǎn)單版本(生產(chǎn)者-消費(fèi)者模型)

    本線程池采用C語言實(shí)現(xiàn) 線程池的場(chǎng)景: 當(dāng)某些任務(wù)特別耗時(shí)(例如大量的IO讀寫操作),嚴(yán)重影響線程其他的任務(wù)的執(zhí)行,可以使用線程池 線程池的一般特點(diǎn): 線程池通常是一個(gè)生產(chǎn)者-消費(fèi)者模型 生產(chǎn)者線程用于發(fā)布任務(wù),任務(wù)通常保存在任務(wù)隊(duì)列中 線程池作為消費(fèi)者,

    2024年02月14日
    瀏覽(27)
  • 多線程學(xué)習(xí)之生產(chǎn)者和消費(fèi)者與阻塞隊(duì)列的關(guān)系

    多線程學(xué)習(xí)之生產(chǎn)者和消費(fèi)者與阻塞隊(duì)列的關(guān)系

    生產(chǎn)者消費(fèi)者問題,實(shí)際上主要是包含了兩類線程: 生產(chǎn)者線程用于生產(chǎn)數(shù)據(jù) 消費(fèi)者線程用于消費(fèi)數(shù)據(jù) 生產(chǎn)者和消費(fèi)者之間通常會(huì)采用一個(gè)共享的數(shù)據(jù)區(qū)域,這樣就可以將生產(chǎn)者和消費(fèi)者進(jìn)行解耦, 兩者都不需要互相關(guān)注對(duì)方的 Object類的等待和喚醒方法 方法名 說明 void

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包