日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python僵尸进程和孤儿进程_python中多进程应用及僵尸进程、孤儿进程

發(fā)布時(shí)間:2024/1/23 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python僵尸进程和孤儿进程_python中多进程应用及僵尸进程、孤儿进程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、python如何使用多進(jìn)程

創(chuàng)建子進(jìn)程的方式

1.導(dǎo)入multiprocessing 中的Process類 實(shí)例化這個(gè)類 指定要執(zhí)行的任務(wù) target

import os

from multiprocessing import Process

"""

Process 就表示進(jìn)程

為什么要開(kāi)進(jìn)程

"""

def task():

print("this is sub process")

print("sub process id %s" % os.getpid())

if __name__ == '__main__':

# ######注意 開(kāi)啟進(jìn)程的代碼必須放在 ————main————判斷下面

# 實(shí)例化一個(gè)進(jìn)程對(duì)象 并制定他要做的事情 用函數(shù)來(lái)指定

p = Process(target=task)

p.start() # 給操作系統(tǒng)發(fā)送消息 讓它開(kāi)啟進(jìn)程

print("this is parent process")

print("parent process is: %s" % os.getpid())

print("over")

linux 與windows開(kāi)啟進(jìn)程的方式不同

linux 會(huì)將父進(jìn)程的內(nèi)存數(shù)據(jù) 完整copy一份給子進(jìn)程

注意:

? windows 會(huì)導(dǎo)入父進(jìn)程的代碼 從頭執(zhí)行一遍 來(lái)獲取需要處理的任務(wù)

? 所以在編寫(xiě)代碼時(shí)如果是windows一定要將開(kāi)啟進(jìn)程的代碼放main判斷中

? linux 可以不放

2.導(dǎo)入multiprocessing 中的Process類 繼承這個(gè)類 覆蓋run方法 將要執(zhí)行的任務(wù)放入run中開(kāi)啟進(jìn)程時(shí)會(huì)自動(dòng)執(zhí)行該函數(shù)

from multiprocessing import Process

import os

class Downloader(Process):

# def __init__(self,url,size,name):

# super().__init__()

# self.url = url

# self.size = size

# self.name = name

def run(self):

print(os.getpid())

pass

if __name__ == '__main__':

m = Downloader()

m.start()

print("parent over",os.getpid())

如果需要對(duì)進(jìn)程對(duì)象進(jìn)行高度自定義那就可以繼承它

進(jìn)程之間內(nèi)存相互隔離

from multiprocessing import Process

import os,time

a = 257

def task():

global a

# print("2",a,id(a))

a = 200

if __name__ == '__main__':

p = Process(target=task)

p.start() # 向操作系統(tǒng)發(fā)送指令

time.sleep(4)

print(a)

join函數(shù)

from multiprocessing import Process

import time

def task1(name):

for i in range(10000):

print("%s run" % name)

def task2(name):

for i in range(100):

print("%s run" % name)

if __name__ == '__main__': # args 是給子進(jìn)程傳遞的參數(shù) 必須是元組

p1 = Process(target=task1,args=("p1",))

p1.start() # 向操作系統(tǒng)發(fā)送指令

# p1.join() # 讓主進(jìn)程 等待子進(jìn)程執(zhí)行完畢在繼續(xù)執(zhí)行

p2 = Process(target=task2,args=("p2",))

p2.start() # 向操作系統(tǒng)發(fā)送指令

p2.join() # 讓主進(jìn)程 等待子進(jìn)程執(zhí)行完畢在繼續(xù)執(zhí)行

p1.join()

#需要達(dá)到的效果是 必須保證兩個(gè)子進(jìn)程是并發(fā)執(zhí)行的 并且 over一定是在所有任務(wù)執(zhí)行完畢后執(zhí)行

print("over")

案例:

# join的使用

from multiprocessing import Process

import time

def task1(name):

for i in range(10):

print("%s run" % name)

if __name__ == '__main__': # args 是給子進(jìn)程傳遞的參數(shù) 必須是元組

ps = []

for i in range(10):

p = Process(target=task1,args=(i,))

p.start()

ps.append(p)

# 挨個(gè)join以下

for i in ps:

i.join()

print("over")

二、僵尸進(jìn)程與孤兒進(jìn)程

孤兒進(jìn)程 當(dāng)父進(jìn)程已經(jīng)結(jié)束 而子進(jìn)程還在運(yùn)行 子進(jìn)程就稱為孤兒進(jìn)程 尤其存在的必要性,沒(méi)有不良影響

僵尸進(jìn)程 當(dāng)一個(gè)進(jìn)程已經(jīng)結(jié)束了但是,它仍然還有一些數(shù)據(jù)存在 此時(shí)稱之為僵尸進(jìn)程

在linux中,有這么一個(gè)機(jī)制,父進(jìn)程無(wú)論什么時(shí)候都可以獲取到子進(jìn)程的的 一些數(shù)據(jù)

子進(jìn)程 任務(wù)執(zhí)行完畢后,確實(shí)結(jié)束了但是仍然保留一些數(shù)據(jù) 目的是為了讓父進(jìn)程能夠獲取這些信息

linux中 可以調(diào)用waitpid來(lái)是徹底清除子進(jìn)程的殘留信息

python中 已經(jīng)封裝了處理僵尸進(jìn)程的操作 ,無(wú)需關(guān)心

超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的python僵尸进程和孤儿进程_python中多进程应用及僵尸进程、孤儿进程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。