2同時マルチプロセスプログラミング

PIDを取得

ビューの現在のプロセス・ポイント

os.getpid()は、現在のプロセスのPIDを取得します

os.getppid()#は、現在のプロセスの親プロセスのPIDを取得します

子供はを.pid#は子プロセスが現在のプロセスを取得するのpidオブジェクト

ゾンビプロセスと孤立

ゾンビプロセス(有害):まだPID持っている(後)の出口には、すぐに治療を待つために、親プロセスが消えませんでした

あなたはゾンビプロセスの数が多い場合は、プロセスIDだけでなく、システムが新しいプロセスを生成することはできません、このプロセスは害を避ける必要がありますが発生します

(無害)孤立:親プロセスはまだ彼らの処理状況を完了するために、initプロセスによって実行される1つ以上のサブプロセスを終了します

initプロセスは、すべての彼のリハビリの仕事を処理します。

デーモン

  • マスターデーモンプロセスに押し入り
    • デーモンは、メインプロセスのコード実行の終了後に終了します。
    • デーモンの中で、もはやそうでない場合は例外がスローされ、子プロセスを回すことはできません。
  • プロセスは互いに独立している間、メイン処理コードの端部は、デーモンを停止し、実行します

  • def task(x):
        print(f'{x} start')
        time.sleep(2)
        print(f'{x} end')
    
    if __name__ == '__main__':
        p=Process(target=task,args=('sb',))
        p.daemon = True ##一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
        p.start()
    
        print('主')
    
    

オブジェクト.join()

、その後、ID pを必要としないオペレーティングシステムに通知し、オペレーティング・システムへの要求が占有され、回復することができます

しかし、PID、ゾンビのままになります

from multiprocessing import Process
import time,os

def task():
    print('%s is running' %os.getpid())
    time.sleep(3)
    
if __name__ == '__main__':
    p=Process(target=task)
    p.start()
    p.join() # 等待进程p结束后,join函数内部会发送系统调用wait,去告诉操作系统回收掉进程p的id号

    print(p.pid) #此时能看到子进程p的id号
    print('主')

生きている()

プロセスがすでに終了を実行しているかどうかを確認

終了

ランニング終了の直接のプロセス

アナロググラブ票アプレット

ファイルを共有する複数のプロセス

データベースファイルは、アナログは票をつかむためにする場合

from  multiprocessing import Process
import json,time,os

def search():
    time.sleep(1) # 模拟网络io
    with open('db.txt',mode='rt',encoding='utf-8') as f:
        res = json.load(f)
        print(f'还剩{res["count"]}')

def get():
    with open('db.txt',mode='rt',encoding='utf-8') as f:
        res = json.load(f)
        # print(f'还剩{res["count"]}')
    # time.sleep(1) # 模拟网络io
    if res['count'] > 0:
        res['count'] -= 1
        with open('db.txt',mode='wt',encoding='utf-8') as f:
            json.dump(res,f)
            print(f'进程{os.getpid()} 抢票成功')
        time.sleep(1.5) # 模 拟网络io

    else:
        print('票已经售空啦!!!!!!!!!!!')

def task():
    search()
    get()

if __name__ == '__main__':
    for i in range(15):
        p = Process(target=task)
        p.start()
        # p.join()


# 为了保证数据的安全,要牺牲掉效率.

おすすめ

転載: www.cnblogs.com/jhpy/p/11514944.html