並行プログラミングのプロセスや他の用途に参加

ディレクトリ

要約最後のレッスン
1、プロセスの使用に参加
IIを。の他の用途のプロセス
3を、プロセス名とis_alive(理解)
4、端末の処理(理解)
V.デーモン
票つかむために6小さなプログラムを
授業内容の見直しに関するを
「」 '
OS
*****
シリアル:再実行無傷
並行:実行単核が同時に表示され
、並列に:実際の走行を同時に

マルチチャネル・テクノロジー:
空間多重:共有メモリ、互いから分離された複数のプロセス、物理的分離のレベル。
時間多重化:一般的なCPU


プログラムは:ハード上のファイルを横たわる
プロセス:プログラムの実装は、リソースの一連の和である、
方法を子プロセスで私たちのプログラムを再オープンします。

実行している我々のプログラムの効率を向上させることができる状態を阻止する最小化


= +同時ステートスイッチを保存

「「」

*****

過去の親プロセスの完全なコピーのすべてのコード新しい子プロセス・アプリケーションのメモリ空間を開きます

マルチプロセッシング・インポート・プロセスから

デフタスク(x)は:

パス

もし名前 ==「メイン」:

P =プロセス(目標=タスク、引数の=(45))

p.start()

子プロセスをオープンする2番目の方法が使用されていません

マルチプロセッシング・インポート・プロセスから

クラスXX(プロセス):

デフのinit(自己、X):

スーパー().__のinit __()

self.x = X

デフ(自己)を実行します。

パス

P = XX()

p.start()

互いに分離メモリ空間を確認します

ゾンビプロセス:子プロセスの終了親プロセス親が待機しないとき()の場合は、プロセスがゾンビプロセスになります勃発しました。

*****

最後の最後まで待っているすべての子プロセスの親プロセス。

コンテンツ今日

孤立(無害)*

親プロセスは終了しますが、子供が孤立となるよう、それは、1つ以上の子プロセスがまだ実行されているのです。孤児プロセスは、それらにコレクションのinitプロセスの完了状況によってプロセス(工程1)の採用はinitされます。

「」 '
1.無害
死者、ゾンビの回復プロセスを待っている子プロセスに親を。

ケース2無害な
親は子供が生きて、死ぬ、initプロセスと回復によって引き継がれてきました。

ケース3
親プロセスはゾンビの多くを引き起こし、死亡しています。これは、PID番号の多くを占めます

PID数が限られています。
解決策:
最も直接的な方法は、親プロセスを殺すことです。

「「」

*****使い方に参加

他の小さな使い方のプロセス*

PIDとPPIDのビューのマスター*****

デーモン

グラブ票アプレット

キュー

使い方に参加するの、プロセス
のインポートプロセスのマルチプロセッシングから
インポート時間
:DEF fooの()
印刷(「プロセスのスタート」)
time.sleep(2.3)
を印刷(「プロセスの終了を」)

IF 名前 == ' メイン ':
P-プロセス=(対象= FOO)
p.start()#の
#コア需要がある
time.sleep(5)#
p.join()#は、メインプロセスは、子が終了するのを、その後、待って長生きブロックされましたその後、ダウンを行う(感謝:内部で待機()非アクティブ)
(「主」)印刷
プロセスの2つの他の用途
インポート・プロセス・マルチプロセッシングから、current_process
インポート時、OSは

デフタスク():

print('子进程 start')
print('在子进程中查看自己的pid',current_process().pid) # 在子进程中查看自己的pid
print('在子进程中查看父进程的pid',os.getppid()) #
time.sleep(200)
print('子进程 end')

もし名前 ==「メイン」:

p = Process(target=task)
p.start()
print('在主进程查看子进程的pid',p.pid) # 一定要写在 start()之后
print('主进程的pid',os.getpid())
print('主进程的父进程pid',os.getppid())
print('主')

「「」

覚えておいてください、これはそれがマスターにokです

角度は、現在のプロセスの視点に立っ

現在のプロセスのPID os.getpid()#GET
PIDの現在のプロセスの親を取得os.getppid()#
を.pid子プロセスオブジェクト#は、子プロセスが現在のプロセスを取得するのpid

「」「
三、プロセス名とis_aliveを(理解)
インポートプロセスをマルチプロセッシングから、current_process
インポート時間
)DEF fooの(:
印刷(」プロセスを起動「)
印刷(」------------- -------- 'current_process()。名)
time.sleep(2)
印刷('プロセスの終了「)

もし名前 == ' メイン ':
P =プロセス(目標= FOO)
#P2 =プロセス(目標= FOO)
#P3 =プロセス(目標= FOO、NAME ='ロッキー')

p.start()
# p2.start()
# p3.start()
print(p.is_alive()) # True
time.sleep(5)
print(p.is_alive()) # 代码运行完了就算死了 False
# print(p.name)
# print(p2.name)
# print(p3.name)
print('主')

四、プロセス的端子(了解)
インポートプロセスを多重処理から、current_process
インポート時間
DEFのfoo():
プリント( '開始进程')
プリント( '------------------ ---」、current_process()。名)
time.sleep(50)
印刷( '进程末端')

もし名前 == ' メイン ':
P =プロセス(対象= FOO)

p.start()
p.terminate() # 给操作系统发了一个请求
print(p.is_alive()) # True
p.join()
print(p.is_alive()) # False

print('主')

第五に、デーモン
「」 '
デーモン
ガーディアンは- 「と
本質、サブプロセスである
メインプロセスのためのコードはデーモンが終了し終了します。しかし、この時間は、メインプロセスは終わってないかもしれません。
「」 '

以下からのプロセスのマルチプロセッシング・インポート
インポート時間
:DEF fooの()
印刷(「デーモンを起動」)
time.sleep(5)
印刷(「デーモン」末端)

IF 名前 == ' メイン ':
P-プロセス=(対象= FOO)
p.daemon =このデーモン用に定義された真の#子プロセス
p.start()
time.sleep(2)
印刷( '主')
六、グラブチケットアプレット
のインポート・プロセス・マルチプロセッシングから
インポートJSONを、時間、OS

DEF)(検索:
time.sleep(1)#模拟をIO网络
(モード= 'RT'、符号化= 'UTF-8' 'db.txt')、Fなどのオープン有する:
RES = json.load(F)
印刷(F '还剩{RES [ "カウント"]}')

DEF GET():
オープン( 'UTF-8' 'db.txt'、MODE = 'RT'、エンコーディング=)F ASで:
RES = json.load(F)
プリント(F「左{RES [ " COUNT「]} ')
。time.sleep(1)#アナログネットワークIO
IF RES [' COUNT ']> 0:
RES [' COUNT '] - = 1。
開く(と'重量db.txt 'MODE ='」、 =コード'UTF-8')、F AS:
json.dump(RES、F)
印刷(F '過程{os.getpid()}グラブ投票成功')
time.sleep(1.5)#アナログネットワークIO
他:
印刷( 「チケットは、それを完売されています!!!!!!!!!!!」)

デフタスク():
検索()
取得)

もし名前 == ' メイン ':
:Iの範囲内(15)のために
、P =プロセス(目標=タスク)
p.start()
p.join()

データのセキュリティを確保するには、効率を犠牲にします。

おすすめ

転載: www.cnblogs.com/1012zlb/p/11545109.html