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

【從零學(xué)習(xí)python 】84.深入理解線程和進(jìn)程

這篇具有很好參考價值的文章主要介紹了【從零學(xué)習(xí)python 】84.深入理解線程和進(jìn)程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

線程和進(jìn)程

功能

進(jìn)程,能夠完成多任務(wù),比如在一臺電腦上能夠同時運(yùn)行多個QQ。
線程,能夠完成多任務(wù),比如一個QQ中的多個聊天窗口。

定義的不同

  • 進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。
  • 線程是進(jìn)程的一個實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。

區(qū)別

  • 一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程。
  • 線程的劃分尺度小于進(jìn)程(資源比進(jìn)程少),使得多線程程序的并發(fā)性高。
  • 進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。
  • 線程不能夠獨(dú)立執(zhí)行,必須依存在進(jìn)程中??梢詫⑦M(jìn)程理解為工廠中的一條流水線,而其中的線程就是這個流水線上的工人。

優(yōu)缺點(diǎn)

線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源的管理和保護(hù);而進(jìn)程則相反。

進(jìn)程間通信-Queue

from multiprocessing import Queue

q = Queue(3)  # 初始化一個Queue對象,最多可接收三條put消息
q.put("消息1")
q.put("消息2")
print(q.full())  # False
q.put("消息3")
print(q.full())  # True

# 因?yàn)橄⒘嘘?duì)已滿下面的try都會拋出異常,第一個try會等待2秒后再拋出異常,第二個Try會立刻拋出異常
try:
    q.put("消息4", True, 2)
except:
    print("消息列隊(duì)已滿,現(xiàn)有消息數(shù)量:%s" % q.qsize())

try:
    q.put_nowait("消息4")
except:
    print("消息列隊(duì)已滿,現(xiàn)有消息數(shù)量:%s" % q.qsize())

# 推薦的方式,先判斷消息列隊(duì)是否已滿,再寫入
if not q.full():
    q.put_nowait("消息4")

# 讀取消息時,先判斷消息列隊(duì)是否為空,再讀取
if not q.empty():
    for i in range(q.qsize()):
        print(q.get_nowait())

說明:

  • 初始化Queue()對象時(例如:q=Queue()),若括號中沒有指定最大可接收的消息數(shù)量,或數(shù)量為負(fù)值,那么就代表可接受的消息數(shù)量沒有上限(直到內(nèi)存的盡頭)。
  • Queue.qsize():返回當(dāng)前隊(duì)列包含的消息數(shù)量。
  • Queue.empty():如果隊(duì)列為空,返回True,反之返回False。
  • Queue.full():如果隊(duì)列滿了,返回True,反之返回False。
  • Queue.get([block[, timeout]]):獲取隊(duì)列中的一條消息,然后將其從隊(duì)列中移除,block默認(rèn)值為True。
    • 如果block使用默認(rèn)值,且沒有設(shè)置timeout(單位秒),消息隊(duì)列如果為空,此時程序?qū)⒈蛔枞ㄍT谧x取狀態(tài)),直到從消息隊(duì)列中讀到消息為止。如果設(shè)置了timeout,則會等待timeout秒,若還沒讀取到任何消息,則拋出"Queue.Empty"異常。
    • 如果block值為False,消息隊(duì)列如果為空,則會立刻拋出"Queue.Empty"異常。
  • Queue.get_nowait():相當(dāng)于Queue.get(False)
  • Queue.put(item, [block[, timeout]]):將item消息寫入隊(duì)列,block默認(rèn)值為True。
    • 如果block使用默認(rèn)值,且沒有設(shè)置timeout(單位秒),消息隊(duì)列如果已經(jīng)沒有空間可寫入,此時程序?qū)⒈蛔枞ㄍT趯懭霠顟B(tài)),直到從消息隊(duì)列騰出空間為止。如果設(shè)置了timeout,則會等待timeout秒,若還沒有空間,則拋出"Queue.Full"異常。
    • 如果block值為False,消息隊(duì)列如果沒有空間可寫入,則會立刻拋出"Queue.Full"異常。
  • Queue.put_nowait(item):相當(dāng)于Queue.put(item, False)

使用Queue實(shí)現(xiàn)進(jìn)程共享

我們以Queue為例,在父進(jìn)程中創(chuàng)建兩個子進(jìn)程,一個往Queue里寫數(shù)據(jù),一個從Queue里讀數(shù)據(jù):

from multiprocessing import Process, Queue
import os, time, random

# 寫數(shù)據(jù)進(jìn)程執(zhí)行的代碼:
def write(q):
    for value in ['A', 'B', 'C']:
        print('Put %s to queue...' % value)
        q.put(value)
        time.sleep(random.random())

# 讀數(shù)據(jù)進(jìn)程執(zhí)行的代碼:
def read(q):
    while True:
        if not q.empty():
            value = q.get(True)
            print('Get %s from queue.' % value)
            time.sleep(random.random())
        else:
            break

if __name__=='__main__':
    # 父進(jìn)程創(chuàng)建Queue,并傳給各個子進(jìn)程:
    q = Queue()
    pw = Process(target=write, args=(q,))
    pr = Process(target=read, args=(q,))
    # 啟動子進(jìn)程pw,寫入:
    pw.start()
    # 等待pw結(jié)束:
    pw.join()
    # 啟動子進(jìn)程pr,讀取:
    pr.start()
    pr.join()
    print('所有數(shù)據(jù)都寫入并且讀完')

進(jìn)階案例

【Python】Python 實(shí)現(xiàn)猜單詞游戲——挑戰(zhàn)你的智力和運(yùn)氣!

【python】Python tkinter庫實(shí)現(xiàn)重量單位轉(zhuǎn)換器的GUI程序

【python】使用Selenium獲取(2023博客之星)的參賽文章

【python】使用Selenium和Chrome WebDriver來獲取 【騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營】中的文章信息

使用騰訊云 Cloud studio 實(shí)現(xiàn)調(diào)度百度AI實(shí)現(xiàn)文字識別

【玩轉(zhuǎn)Python系列【小白必看】Python多線程爬蟲:下載表情包網(wǎng)站的圖片

【玩轉(zhuǎn)Python系列】【小白必看】使用Python爬取雙色球歷史數(shù)據(jù)并可視化分析

【玩轉(zhuǎn)python系列】【小白必看】使用Python爬蟲技術(shù)獲取代理IP并保存到文件中

【小白必看】Python圖片合成示例之使用PIL庫實(shí)現(xiàn)多張圖片按行列合成

【小白必看】Python爬蟲實(shí)戰(zhàn)之批量下載女神圖片并保存到本地

【小白必看】Python詞云生成器詳細(xì)解析及代碼實(shí)現(xiàn)

【小白必看】Python爬取NBA球員數(shù)據(jù)示例

【小白必看】使用Python爬取喜馬拉雅音頻并保存的示例代碼

【小白必看】使用Python批量下載英雄聯(lián)盟皮膚圖片的技術(shù)實(shí)現(xiàn)

【小白必看】Python爬蟲數(shù)據(jù)處理與可視化

【小白必看】輕松獲取王者榮耀英雄皮膚圖片的Python爬蟲程序

【小白必看】利用Python生成個性化名單Word文檔

【小白必看】Python爬蟲實(shí)戰(zhàn):獲取陰陽師網(wǎng)站圖片并自動保存

小白必看系列之圖書管理系統(tǒng)-登錄和注冊功能示例代碼

小白實(shí)戰(zhàn)100案例: 完整簡單的雙色球彩票中獎判斷程序,適合小白入門

使用 geopandas 和 shapely(.shp) 進(jìn)行地理空間數(shù)據(jù)處理和可視化

使用selenium爬取貓眼電影榜單數(shù)據(jù)

圖像增強(qiáng)算法Retinex原理與實(shí)現(xiàn)詳解

爬蟲入門指南(8): 編寫天氣數(shù)據(jù)爬蟲程序,實(shí)現(xiàn)可視化分析

爬蟲入門指南(7):使用Selenium和BeautifulSoup爬取豆瓣電影Top250實(shí)例講解【爬蟲小白必看】

爬蟲入門指南(6):反爬蟲與高級技巧:IP代理、User-Agent偽裝、Cookie繞過登錄驗(yàn)證及驗(yàn)證碼識別工具

爬蟲入門指南(5): 分布式爬蟲與并發(fā)控制 【提高爬取效率與請求合理性控制的實(shí)現(xiàn)方法】

爬蟲入門指南(4): 使用Selenium和API爬取動態(tài)網(wǎng)頁的最佳方法

爬蟲入門指南(3):Python網(wǎng)絡(luò)請求及常見反爬蟲策略應(yīng)對方法

爬蟲入門指南(2):如何使用正則表達(dá)式進(jìn)行數(shù)據(jù)提取和處理

爬蟲入門指南(1):學(xué)習(xí)爬蟲的基礎(chǔ)知識和技巧

深度學(xué)習(xí)模型在圖像識別中的應(yīng)用:CIFAR-10數(shù)據(jù)集實(shí)踐與準(zhǔn)確率分析

Python面向?qū)ο缶幊袒A(chǔ)知識和示例代碼

MySQL 數(shù)據(jù)庫操作指南:學(xué)習(xí)如何使用 Python 進(jìn)行增刪改查操作

Python文件操作指南:編碼、讀取、寫入和異常處理

使用Python和Selenium自動化爬取 #【端午特別征文】 探索技術(shù)極致,未來因你出“粽” # 的投稿文章

Python多線程與多進(jìn)程教程:全面解析、代碼案例與優(yōu)化技巧

Selenium自動化工具集 - 完整指南和使用教程

Python網(wǎng)絡(luò)爬蟲基礎(chǔ)進(jìn)階到實(shí)戰(zhàn)教程

Python入門教程:掌握for循環(huán)、while循環(huán)、字符串操作、文件讀寫與異常處理等基礎(chǔ)知識

Pandas數(shù)據(jù)處理與分析教程:從基礎(chǔ)到實(shí)戰(zhàn)

Python 中常用的數(shù)據(jù)類型及相關(guān)操作詳解

【2023年最新】提高分類模型指標(biāo)的六大方案詳解

Python編程入門基礎(chǔ)及高級技能、Web開發(fā)、數(shù)據(jù)分析和機(jī)器學(xué)習(xí)與人工智能

用4種回歸方法繪制預(yù)測結(jié)果圖表:向量回歸、隨機(jī)森林回歸、線性回歸、K-最近鄰回歸文章來源地址http://www.zghlxwxcb.cn/news/detail-668216.html

到了這里,關(guān)于【從零學(xué)習(xí)python 】84.深入理解線程和進(jìn)程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【從零開始學(xué)習(xí)JAVA | 三十九篇】深入多線程

    【從零開始學(xué)習(xí)JAVA | 三十九篇】深入多線程

    目錄 前言:? ? ? ?? ?1.線程的壽命周期? 2.線程的安全問題 3.鎖 同步代碼塊: 同步方法: 死鎖: 4.生產(chǎn)者和消費(fèi)者模式(等待喚醒機(jī)制) 總結(jié): ????????當(dāng)今軟件開發(fā)領(lǐng)域中,多線程編程已成為一項(xiàng)至關(guān)重要的技能。然而,要編寫出高效、可靠的多線程程序并不容

    2024年02月13日
    瀏覽(88)
  • Python的多線程和多進(jìn)程(通過故事來學(xué)習(xí))

    曾經(jīng)有一個名叫小明的開發(fā)者,他正在開發(fā)一個需要同時處理多個任務(wù)的應(yīng)用程序。他知道,如果使用單線程處理這些任務(wù),可能會導(dǎo)致應(yīng)用程序變得非常緩慢。于是,他決定在自己的 Python 應(yīng)用程序中使用多線程和多進(jìn)程來提高處理能力。 小明首先學(xué)習(xí)了 Python 的多線程編

    2024年02月07日
    瀏覽(18)
  • 【云原生-深入理解 Kubernetes 系列 3】深入理解容器進(jìn)程的文件系統(tǒng)

    【云原生-深入理解 Kubernetes 系列 3】深入理解容器進(jìn)程的文件系統(tǒng)

    【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程 【云原生-深入理解Kubernetes-2】容器 Linux Cgroups 限制 大家好,我是秋意零。 ?? CSDN作者主頁 ?? 博客主頁 ?? 簡介 ?? 普通本科生在讀 在校期間參與眾多計(jì)算機(jī)相關(guān)比賽,如:?? “省賽”、“國賽” ,斬獲多項(xiàng)獎項(xiàng)榮譽(yù)證書

    2024年02月06日
    瀏覽(52)
  • JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別)

    JavaEE 初階篇-深入了解進(jìn)程與線程(常見的面試題:進(jìn)程與線程的區(qū)別)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評論? 文章目錄 ? ? ? ? 1.0 進(jìn)程概述 ? ? ? ? 2.0 線程概述 ? ? ? ? 2.1 多線程概述 ? ? ? ? 3.0 常見的面試題:談?wù)勥M(jìn)程與線程的區(qū)別 ? ? ? ? 4.0 Java 實(shí)現(xiàn)多線程的常見方法 ? ? ? ? 4.1 實(shí)現(xiàn)多線程方法 - 繼承

    2024年04月13日
    瀏覽(32)
  • 【Linux】深入理解進(jìn)程概念

    【Linux】深入理解進(jìn)程概念

    個人主頁:??在肯德基吃麻辣燙 我的gitee:Linux倉庫 個人專欄:Linux專欄 分享一句喜歡的話:熱烈的火焰,冰封在最沉默的火山深處 本篇文章繼上一篇的馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)這兩個軟硬件的概念之后,開始講解Linux下 三座大山 之一的 進(jìn)程 。 因?yàn)檫M(jìn)程概念雖然不是

    2024年02月14日
    瀏覽(18)
  • lab5:深入理解進(jìn)程切換

    lab5:深入理解進(jìn)程切換

    本文主要分析 Linux 5.4.34 版本內(nèi)核中進(jìn)程切換的基本操作與基本代碼框架。 content_switch 函數(shù)位于 Linux 內(nèi)核源碼目錄的 kernel/sched/core.c 中,代碼如下: content_switch 函數(shù)有三個參數(shù):rq、prev、next,其中 rq 指向本次進(jìn)程切換發(fā)生的 進(jìn)程就緒隊(duì)列;prev 和 next 分別指向切換前后進(jìn)程

    2024年02月05日
    瀏覽(16)
  • 深入理解多線程編程

    深入理解多線程編程

    title: 深入理解多線程編程 date: 2024/4/25 17:32:02 updated: 2024/4/25 17:32:02 categories: 后端開發(fā) tags: 線程同步 互斥鎖 死鎖避免 競態(tài)條件 線程池 異步編程 性能優(yōu)化 線程 :在操作系統(tǒng)中,一個程序可以被劃分為多個執(zhí)行流,每個執(zhí)行流就是一個獨(dú)立的線程。線程是進(jìn)程中的一個執(zhí)行實(shí)

    2024年04月25日
    瀏覽(22)
  • 深入理解Java線程

    深入理解Java線程

    進(jìn)程 程序由指令和數(shù)據(jù)組成,但程序要運(yùn)行就要將指令加載進(jìn)CPU以及數(shù)據(jù)加載進(jìn)內(nèi)存,并且在指令運(yùn)行過程中可能還會用到磁盤、網(wǎng)絡(luò)等設(shè)備。進(jìn)程就是用來加載指令、管理內(nèi)存和IO的。當(dāng)一個程序被運(yùn)行,從磁盤加載這個程序的代碼至內(nèi)存,就開啟了一個進(jìn)程。進(jìn)程可以視

    2024年02月12日
    瀏覽(23)
  • Java進(jìn)程線程介紹創(chuàng)建和執(zhí)行銷毀并理解線程安全和線程池 Native Method

    Java進(jìn)程線程介紹創(chuàng)建和執(zhí)行銷毀并理解線程安全和線程池 Native Method

    進(jìn)程和線程都是一個控制流程。 一個進(jìn)程通常對應(yīng)于一個程序。 一個程序可以由多個不同的線程構(gòu)成。 一個進(jìn)程就是一個應(yīng)用程序 一個應(yīng)用程序面對多個用戶則多個進(jìn)程 一個進(jìn)程則多個線程 多個線程共享資源且攜帶數(shù)據(jù)操作 多進(jìn)程資源隔離 多線程的核心在于多個代碼塊

    2024年02月02日
    瀏覽(35)
  • 深入理解Java線程間通信

    合理的使用Java多線程可以更好地利用服務(wù)器資源。一般來講,線程內(nèi)部有自己私有的線程上下文,互不干擾。但是當(dāng)我們需要多個線程之間相互協(xié)作的時候,就需要我們掌握J(rèn)ava線程的通信方式。本文將介紹Java線程之間的幾種通信原理。 在Java中,鎖的概念都是基于對象的,

    2024年02月09日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包