マルチプロセスアプリケーションとゾンビプロセスでのpython、孤立

複数のプロセスを使用する方法、パイソン

道の子プロセスを作成します。

指定されたタスクのターゲットを実行するために、このクラスのプロセス・クラス・インスタンス1.インポートマルチ

import os
from multiprocessing import Process
"""
Process 就表示进程
为什么要开进程
"""

def task():
    print("this is sub process")
    print("sub process id %s" % os.getpid())


if __name__ == '__main__':
    # ######注意 开启进程的代码必须放在 ————main————判断下面
    #  实例化一个进程对象 并制定他要做的事情  用函数来指定
    p = Process(target=task)
    p.start() # 给操作系统发送消息 让它开启进程
    print("this is parent process")
    print("parent process is: %s" % os.getpid())
    print("over")

LinuxとWindowsのオープンなプロセス別の方法

Linuxのメモリデータは、子プロセスに親プロセスの完全なコピーになります

注意:

コードウィンドウに対処する必要があるタスクの実行を取得するために、もう一度最初から親プロセスをインポートします

窓が判断の主なオープンなプロセスを置くことが確実である場合は、コードを書くのでコード

Linuxは、保持することができます

自動的に実行され、この関数は、2 Processクラスは、このクラスのタスクの実行方法は、プロセス中にターン実行で実行されるオーバーライド継承マルチプロセッシングインポート

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())

あなたがそれを処理する必要がある場合は、高度にカスタマイズ可能オブジェクトは、それを継承することができます

プロセスメモリ間の相互分離

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() # 向操作系统发送指令

    time.sleep(4)
    print(a)

機能に参加

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 是给子进程传递的参数 必须是元组
    p1 = Process(target=task1,args=("p1",))
    p1.start()  # 向操作系统发送指令
    # p1.join()   # 让主进程 等待子进程执行完毕在继续执行

    p2 = Process(target=task2,args=("p2",))
    p2.start()  # 向操作系统发送指令

    p2.join()  # 让主进程 等待子进程执行完毕在继续执行
    p1.join()


    #需要达到的效果是 必须保证两个子进程是并发执行的 并且 over一定是在所有任务执行完毕后执行
    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 是给子进程传递的参数 必须是元组


    ps = []
    for i in range(10):
        p = Process(target=task1,args=(i,))
        p.start()
        ps.append(p)

    # 挨个join以下
    for i in ps:
        i.join()

    print("over")

第二に、ゾンビプロセスと孤立

親プロセスが終了した子プロセスがまだ必要性が存在し、特に孤児と呼ばれるプロセスの子プロセスを実行しているとき、孤児のプロセスは、悪影響はありません

処理が終了している、しかし、それはまだいくつかのデータは、この時点で存在しているゾンビプロセスがゾンビプロセスと呼ばれています

Linuxでは、このようなメカニズムは、親は、子プロセスにデータの一部を取得することができますどのような時間に関係なく、存在しません

タスクの子プロセスが確実に超える、終了しますがされた後、まだ親プロセスがこの情報を入手することができますように設計されていたデータの一部を保持

Linuxは完全に子プロセスが残留する情報である削除するためにwaitpidを呼び出すことができます

Pythonは気にせずに、演算処理ゾンビをカプセル化されています

おすすめ

転載: www.cnblogs.com/chuwanliu/p/11121734.html