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

Python流程控制常用工具詳解

 更新時(shí)間:2020年02月24日 14:20:44   投稿:yaominghui  
這篇文章主要介紹了Python流程控制常用工具詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在我們的工作中,我們使用ddagent ver。5作為收集工具,收集和報(bào)告托管服務(wù)器的性能指標(biāo),并對(duì)ddagent進(jìn)行一定程度的定制。經(jīng)過(guò)多次功能迭代,發(fā)現(xiàn)一批在線(xiàn)運(yùn)行時(shí)間長(zhǎng)的托管服務(wù)器占用了太多內(nèi)存。分析問(wèn)題機(jī)器上進(jìn)程樹(shù)中每個(gè)節(jié)點(diǎn)的占用情況,可以看出ddagent集合進(jìn)程的內(nèi)存占用仍然很高。

我們將學(xué)習(xí)最基本的流程控制工具,比如

if 條件判斷for 循環(huán)while 循環(huán)

作為保證業(yè)務(wù)系統(tǒng)穩(wěn)定運(yùn)行的監(jiān)控組件,存在內(nèi)存泄漏,這自然是非常嚴(yán)重的,所以我們開(kāi)始了我們的“故障排除之旅”。

if-elif-else 判斷

分析

有很多工具可以分析和導(dǎo)出Python程序的內(nèi)存狀態(tài)。在這里,我們使用pyrasite,它可以附加到正在運(yùn)行的Python程序,生成內(nèi)存快照,并檢查當(dāng)前哪些對(duì)象類(lèi)型占用了多少內(nèi)存,并從大到小排序。

使用命令非常簡(jiǎn)單: pyrasite-memory-viewer <PID>,同時(shí)會(huì)生成一份快照文件: /tmp/pyrasite-<PID>-objects.json。

由于無(wú)法提供真實(shí)的生產(chǎn)數(shù)據(jù),下面提到的所有數(shù)據(jù)都來(lái)自問(wèn)題版本在測(cè)試環(huán)境中運(yùn)行12小時(shí)后的采樣。

在pyrasite提供的Cui視圖中,我們可以清楚地看到字典類(lèi)型的對(duì)象實(shí)例占用的內(nèi)存最多,達(dá)到3.4mb,有6621個(gè)實(shí)例:

while 循環(huán)

While循環(huán)也是一種常見(jiàn)的循環(huán)方式。這種循環(huán)通常以循環(huán)體類(lèi)或條件方式結(jié)束。它不可能無(wú)限期地進(jìn)行下去。

對(duì)于泄漏情況,我們有以下事實(shí)和猜測(cè):

一個(gè)或多個(gè)位置持續(xù)創(chuàng)建空字典對(duì)象,并且無(wú)法回收它們,從而導(dǎo)致內(nèi)存泄漏內(nèi)存泄漏量隨時(shí)間而增加。在索引收集業(yè)務(wù)中,泄漏很可能是在每個(gè)收集過(guò)程中引起的,并在間隔期之后重復(fù)觸發(fā)我們看不到當(dāng)前依賴(lài)的ddagent版本存在尚未關(guān)閉的相關(guān)問(wèn)題,這可能是在我們的定制過(guò)程中引入的錯(cuò)誤

[
 [
 [".../embedded/lib/python2.7/threading.py",774,"__bootstrap","self.__bootstrap_inner()"],
 [".../embedded/lib/python2.7/threading.py",801,"__bootstrap_inner","self.run()"],
 [".../modules/monitor/bot/schedule.py",51,"run","task.run()"],
 [".../modules/monitor/bot/task.py",50,"run","super(RepeatTask, self).run()"],
 [".../modules/monitor/bot/task.py",18,"run","self.check()"],
 [".../modules/monitor/checks/collector.py",223,"wrapper","_check.run()"],
 [".../modules/monitor/checks/__init__.py",630,"run","self._roll_up_instance_metadata()"],
 [".../modules/monitor/checks/__init__.py",498,"_roll_up_instance_metadata","dict((k, v) for (k, v) in self._instance_metadata))"],
 [".../modules/monitor/tracer.py",33,"__init__","self.trace_info = traceback.extract_stack()"]
 ],
 [
 [".../embedded/lib/python2.7/threading.py",774,"__bootstrap","self.__bootstrap_inner()"],
 [".../embedded/lib/python2.7/threading.py",801,"__bootstrap_inner","self.run()"],
 [".../modules/monitor/bot/schedule.py",51,"run","task.run()"],
 [".../modules/monitor/bot/task.py",50,"run","super(RepeatTask, self).run()"],
 [".../modules/monitor/bot/task.py",18,"run","self.check()"],
 [".../modules/monitor/checks/collector.py",223,"wrapper","_check.run()"],
 [".../modules/monitor/checks/__init__.py",630,"run","self._roll_up_instance_metadata()"],
 [".../modules/monitor/checks/__init__.py",498,"_roll_up_instance_metadata","dict((k, v) for (k, v) in self._instance_metadata))"],
 [".../modules/monitor/tracer.py",33,"__init__","self.trace_info = traceback.extract_stack()"]
 ],
 [
 [".../embedded/lib/python2.7/threading.py",774,"__bootstrap","self.__bootstrap_inner()"],
 [".../embedded/lib/python2.7/threading.py",801,"__bootstrap_inner","self.run()"],
 [".../modules/monitor/bot/schedule.py",51,"run","task.run()"],
 [".../modules/monitor/bot/task.py",50,"run","super(RepeatTask, self).run()"],
 [".../modules/monitor/bot/task.py",18,"run","self.check()"],
 [".../modules/monitor/checks/collector.py",223,"wrapper","_check.run()"],
 [".../modules/monitor/checks/__init__.py",630,"run","self._roll_up_instance_metadata()"],
 [".../modules/monitor/checks/__init__.py",498,"_roll_up_instance_metadata","dict((k, v) for (k, v) in self._instance_metadata))"],
 [".../modules/monitor/tracer.py",33,"__init__","self.trace_info = traceback.extract_stack()"]
 ],
...

重播

我們不提“做好設(shè)計(jì)審查和規(guī)范審查”、“加強(qiáng)試驗(yàn)階段質(zhì)量檢驗(yàn)工作”等“老生常談”,也值得我們反思。

要徹底防止和控制內(nèi)存泄漏幾乎是不可能的,像rust這樣的安全編程語(yǔ)言也不能保證程序不會(huì)泄漏內(nèi)存。

許多引發(fā)內(nèi)存不安全的行為,如數(shù)組訪(fǎng)問(wèn)越界、訪(fǎng)問(wèn)釋放后的內(nèi)存等,都可以通過(guò)制定更嚴(yán)格的編程模型(如rust提出的所有權(quán)+生命周期規(guī)則)甚至數(shù)據(jù)競(jìng)爭(zhēng)問(wèn)題來(lái)避免。

然而,觸發(fā)內(nèi)存泄漏的行為,如競(jìng)爭(zhēng)條件,需要開(kāi)發(fā)人員將開(kāi)發(fā)組件和業(yè)務(wù)規(guī)則結(jié)合起來(lái)。設(shè)想一個(gè)需要手動(dòng)觸發(fā)刷新的數(shù)據(jù)隊(duì)列。結(jié)果,我們?cè)谕扑蛿?shù)據(jù)時(shí)忘記調(diào)用它。這種內(nèi)存泄漏無(wú)法通過(guò)任何常規(guī)檢查規(guī)則來(lái)識(shí)別。

關(guān)鍵字函數(shù)是為了更形象地說(shuō)明傳入?yún)?shù)的位置和具體用法。如果一個(gè)函數(shù)有四個(gè)或五個(gè)參數(shù),而且一次傳入的參數(shù)太多,那么很難讓人眼花繚亂。如果key=value用于傳入。

總結(jié)

通過(guò)本節(jié)的學(xué)習(xí),我們了解了通過(guò)if else在不同條件下控制代碼流和執(zhí)行不同代碼。for/while和如何定義函數(shù)有兩種不同的循環(huán)方法,包括函數(shù)的返回值和參數(shù)傳遞方法、position參數(shù)傳遞和向函數(shù)傳遞參數(shù)時(shí)的key=value參數(shù)傳遞。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytest?用例執(zhí)行失敗后其他不再執(zhí)行

    pytest?用例執(zhí)行失敗后其他不再執(zhí)行

    本文主要介紹了pytest?用例執(zhí)行失敗后其他不再執(zhí)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python中sample函數(shù)的介紹與使用

    python中sample函數(shù)的介紹與使用

    sample()函數(shù)常用來(lái)隨機(jī)獲取dataFrame中數(shù)據(jù),可以用于快速查看,下面這篇文章主要給大家介紹了關(guān)于python中sample函數(shù)的介紹與使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例

    python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例

    在本篇文章里小編給大家整理的是關(guān)于python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例,需要的朋友們參考學(xué)習(xí)下。
    2020-02-02
  • 人工智能—Python實(shí)現(xiàn)線(xiàn)性回歸

    人工智能—Python實(shí)現(xiàn)線(xiàn)性回歸

    這篇文章主要介紹了人工智能—Python實(shí)現(xiàn)線(xiàn)性回歸,人工智能分為類(lèi)型、數(shù)據(jù)集、效果評(píng)估、等,線(xiàn)性回歸根據(jù)隨機(jī)初始化的?w?x?b?和?y?來(lái)計(jì)算?loss等步驟實(shí)現(xiàn),下面來(lái)看看文章的具體實(shí)現(xiàn)吧
    2022-01-01
  • Python實(shí)現(xiàn)基本線(xiàn)性數(shù)據(jù)結(jié)構(gòu)

    Python實(shí)現(xiàn)基本線(xiàn)性數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要實(shí)現(xiàn)四種數(shù)據(jù)結(jié)構(gòu),分別是數(shù)組、堆棧、隊(duì)列、鏈表。大家都知道可以用C語(yǔ)言實(shí)現(xiàn)這幾種數(shù)據(jù)結(jié)構(gòu),其實(shí)Python也可以實(shí)現(xiàn),下面跟著小編一起來(lái)學(xué)習(xí)。
    2016-08-08
  • python?基于aiohttp的異步爬蟲(chóng)實(shí)戰(zhàn)詳解

    python?基于aiohttp的異步爬蟲(chóng)實(shí)戰(zhàn)詳解

    這篇文章主要為大家介紹了python?基于aiohttp的異步爬蟲(chóng)實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • python讀取配置文件方式(ini、yaml、xml)

    python讀取配置文件方式(ini、yaml、xml)

    這篇文章主要介紹了python讀取配置文件方式(ini、yaml、xml),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 解決python寫(xiě)入帶有中文的字符到文件錯(cuò)誤的問(wèn)題

    解決python寫(xiě)入帶有中文的字符到文件錯(cuò)誤的問(wèn)題

    今天小編就為大家分享一篇解決python寫(xiě)入帶有中文的字符到文件錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • python用Configobj模塊讀取配置文件

    python用Configobj模塊讀取配置文件

    這篇文章主要介紹了python用Configobj模塊讀取配置文件,幫助大家更好的利用python處理文件,感興趣的朋友可以了解下
    2020-09-09
  • python實(shí)現(xiàn)數(shù)據(jù)庫(kù)跨服務(wù)器遷移

    python實(shí)現(xiàn)數(shù)據(jù)庫(kù)跨服務(wù)器遷移

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)遷移,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評(píng)論

柯坪县| 碌曲县| 微山县| 梧州市| 衡阳市| 盘锦市| 青川县| 额尔古纳市| 凌源市| 平遥县| 西林县| 安康市| 潢川县| 巴南区| 堆龙德庆县| 沈阳市| 连州市| 嘉定区| 佛教| 忻城县| 客服| 娱乐| 安国市| 广昌县| 高青县| 峡江县| 门头沟区| 波密县| 资中县| 大同县| 台中县| 如东县| 定陶县| 安吉县| 延川县| 苏州市| 盱眙县| 澄城县| 山西省| 阳曲县| 固原市|