欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python清理子進(jìn)程機(jī)制剖析

 更新時(shí)間:2017年11月23日 14:30:11   作者:棲遲於一丘  
python的機(jī)制會(huì)自動(dòng)清理已經(jīng)完成任務(wù)的子進(jìn)程的,下面通過(guò)本文給大家分享python清理子進(jìn)程機(jī)制剖析,需要的朋友參考下吧

起步

在我的印象中,python的機(jī)制會(huì)自動(dòng)清理已經(jīng)完成任務(wù)的子進(jìn)程的。通過(guò)網(wǎng)友的提問(wèn),還真看到了僵尸進(jìn)程。

import multiprocessing as mp
import os
import time
def pro():
 print ("os.pid is ", os.getpid())
if __name__ == '__main__':
 print ("parent ", os.getpid())
 while True:
  p = mp.Process(target = pro)
  p.start()
  time.sleep(1)

于是我覺(jué)得我要重新了解一下這個(gè)過(guò)程。

銷毀僵尸進(jìn)程的時(shí)機(jī)

mutilprossing.Process 繼承自 BaseProcess 文件在 Lib/mutilprossing/process.py 中,我們看看它的start方法:

_children = set()
class BaseProcess(object):
 def start(self):
  self._check_closed()
  _cleanup()
  self._popen = self._Popen(self)
  self._sentinel = self._popen.sentinel
  # Avoid a refcycle if the target function holds an indirect
  # reference to the process object (see bpo-30775)
  del self._target, self._args, self._kwargs
  _children.add(self)

_children 是一個(gè)全局的集合變量,保存著所有 BaseProcess 實(shí)例, start 函數(shù)末尾處 _children.add(self) 將進(jìn)程對(duì)象放入。又注意到 _cleanup() 函數(shù):

def _cleanup():
 # check for processes which have finished
 for p in list(_children):
  if p._popen.poll() is not None:
   _children.discard(p)

_popen 是一個(gè) Popen 對(duì)象,代碼在 multiprossing/popen_fork.py 中,其 poll 函數(shù)有個(gè) id, sts = os.waitpid(self.pid, flag) 一個(gè)回收子進(jìn)程的函數(shù)?;厥蘸笤賹?BaseProcess 子類實(shí)例從_children中移除。

這下就清楚了,python在子進(jìn)程start中將進(jìn)程放入集合,子進(jìn)程可能長(zhǎng)時(shí)間運(yùn)行,因此這個(gè)集合上的進(jìn)程會(huì)有很多狀態(tài),而為了防止過(guò)多僵尸進(jìn)程導(dǎo)致資源占用,python會(huì)在下一個(gè)子進(jìn)程 start 時(shí)清理僵尸進(jìn)程。所以,最后一個(gè)子進(jìn)程在自身程序運(yùn)行完畢后就變成僵尸進(jìn)程,它在等待下一個(gè)子進(jìn)程start時(shí)被清理。所以 ps 上總有一個(gè)僵尸進(jìn)程,但這個(gè)僵尸進(jìn)程的 進(jìn)程id 一直在變化。

相關(guān)文章

  • 如何利用opencv對(duì)拍攝圖片進(jìn)行文字識(shí)別

    如何利用opencv對(duì)拍攝圖片進(jìn)行文字識(shí)別

    在有些工程中有時(shí)候我們需要對(duì)圖片文字識(shí)別,下面這篇文章主要給大家介紹了關(guān)于如何利用opencv對(duì)拍攝圖片進(jìn)行文字識(shí)別的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Pycharm中切換pytorch的環(huán)境和配置的教程詳解

    Pycharm中切換pytorch的環(huán)境和配置的教程詳解

    這篇文章主要介紹了Pycharm中切換pytorch的環(huán)境和配置,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python之a(chǎn)scii轉(zhuǎn)中文的實(shí)現(xiàn)

    Python之a(chǎn)scii轉(zhuǎn)中文的實(shí)現(xiàn)

    這篇文章主要介紹了Python之a(chǎn)scii轉(zhuǎn)中文的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python獲取當(dāng)前用戶的主目錄路徑方法(推薦)

    python獲取當(dāng)前用戶的主目錄路徑方法(推薦)

    下面小編就為大家?guī)?lái)一篇python獲取當(dāng)前用戶的主目錄路徑方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • langchain中LLM模型使用詳解

    langchain中LLM模型使用詳解

    這篇文章主要為大家介紹了langchain中LLM模型使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Python Django中間件,中間件函數(shù),全局異常處理操作示例

    Python Django中間件,中間件函數(shù),全局異常處理操作示例

    這篇文章主要介紹了Python Django中間件,中間件函數(shù),全局異常處理操作,結(jié)合實(shí)例形式分析了Django中間件,中間件函數(shù),全局異常處理相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python機(jī)器學(xué)習(xí)之K-Means聚類實(shí)現(xiàn)詳解

    Python機(jī)器學(xué)習(xí)之K-Means聚類實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)之K-Means聚類的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • python字符串中加空格的四種方法

    python字符串中加空格的四種方法

    本文主要介紹了python字符串中加空格的四種方法,包括使用加法運(yùn)算符、join()方法、format()方法和f-string,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 以一段代碼為實(shí)例快速入門(mén)Python2.7

    以一段代碼為實(shí)例快速入門(mén)Python2.7

    這篇文章主要以一段代碼為實(shí)例、簡(jiǎn)單介紹了Python2.7的各種函數(shù)和方法以及語(yǔ)句,來(lái)自網(wǎng)絡(luò)上火爆的在線Python教程網(wǎng)站learnxinyminutes.com,需要的朋友可以參考下
    2015-03-03
  • python可迭代對(duì)象去重實(shí)例

    python可迭代對(duì)象去重實(shí)例

    這篇文章主要介紹了python可迭代對(duì)象去重實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05

最新評(píng)論