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()
# 为了保证数据的安全,要牺牲掉效率.