並行プログラミング - マルチプロセス
によって複雑
並行処理が同時に複数のタスクを実行するために指し、並行プログラミングは、アプリケーションが同時に複数のタスクをサポートするために書かれたことを意味します。
プロセス
プロセスが実行されているプログラムを指し、それをまとめて一連の処理だけでなく、オペレーティング・システムのスケジューリングおよびリソース割り当ての基本単位と呼ばれ
このプロセスは、同時達成するための一つの方法です
プログラムは、複数のプロセスを生成することができます
PIDおよびPPID
PID:数字を処理するシステム
PPIDは:プロセスが別のプロセスBを開くと、そしてBは、親プロセスと呼ばれています。pycharmがPYファイルを実行すると、pycharmは親PYファイルです
パラレルと同時、ブロックし、ノンブロッキング
並行処理は、複数のイベントが同時に発生していること、必要が完全なハンドオーバーを持っていることを意味します
同時に複数のイベント平行手段、互いに独立して
ブロッキング状態は、CPUによって実行することができない後続のコードにつながる、IO操作、またはSLEEPため遭遇します
コントラストをノンブロッキング、それはプログラムがCPUに実行されていることを示しています。
プロセスは三つの状態、持っている状態をブロックし、状態を実行する準備状態を、
Pythonはマルチプロセスを実現します
子プロセスを開くには2つの方法でのPython
実施例1:プロセス・クラスの例
from multiprocessing import Process
import time
def task(name):
print(f'{name} is running ')
time.sleep(3)
print('f{name} is fone')
if __name__=='__main__':
#在windows系统之上,开启子进程的操作一定要放在这个里面
#Process(target=task,kwargs={'name':egon})
p=Process(target=task,args=('jack',))#参数放在元祖里
p.start() # 向操作系统发送请求,操作系统会申请内存空间,然后把父进程的数据拷贝给子进程,作为子进程的初始状态
print('主')
オプション2:継承プロセス、およびrunメソッドをカバー
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self,name):
super(MyProcess,self).__init__()
self.name=name
def run(self):
print('%s is running' %self.name)
time.sleep(3)
print('%s is done' %self.name)
if __name__ == '__main__':
p=MyProcess('jack')
p.start()
print('主')
なお
1.ウィンドウに配置する必要があり、子供を開き__main__
、子プロセスで開いているウィンドウが再帰によって引き起こされるプロセスを作成するために、すべてのコードをリロードしますので、下記の
2.コードが実行メソッドに実行されなければならない第二の方法は、子プロセスは関係なく、メソッドの実行されていない他のを実行します
3.startだけ時間がかかるプロセスを作成するには、オペレーティングシステムへのオペレーティングシステムのメッセージを送信するので、送信された2例があるでしょう
プログラムの実行速度よりも遅い3.1オープンプロセスは、最初の印刷のタスクでメッセージ「マスター」を印刷します
3.2印刷「マスター」のプログラムの実行の速度よりも速いオープンなプロセス、ニュースで最初の印刷タスク、
分離されたプロセス間のメモリ
プロセス内のグローバル変数を変更し、他のプロセスは影響を受けません。二つのファイル、1は変更を実行するのと同じように、他には影響しません。
from multiprocessing import Process
import time
x=1000
def task():
global x
x=0
print('儿子死啦',x)
if __name__ == '__main_
print(x)
p=Process(target=task)
p.start()
time.sleep(5)
print(x)
###
1000
儿子死啦 0
1000
機能に参加します:
これは、プロセスを実行するために別のプロセスの終了後に待機することができます
from multiprocessing import Process
import time
x=1000
def task():
time.sleep(3)
global x
x=0
print('儿子死啦',x)
if __name__ == '__main__':
p=Process(target=task)
p.start()
p.join() # 让父亲在原地等,如果不加join函数,则会先执行print(x)
print(x)
from multiprocessing import Process
import time,random
x=1000
def task(n):
print('%s is runing' %n)
time.sleep(n)
if __name__ == '__main__':
start_time=time.time()
p1=Process(target=task,args=(1,))
p2=Process(target=task,args=(2,))
p3=Process(target=task,args=(3,))
p1.start()
p2.start()
p3.start()
p3.join() #3s
p1.join()
p2.join()
print('主',(time.time() - start_time))
start_time=time.time()
p_l=[]
for i in range(1,4):
p=Process(target=task,args=(i,))
p_l.append(p)
p.start()
for p in p_l:
p.join()
print('主',(time.time() - start_time))
Processオブジェクトの共通属性
from multiprocessing import Process
def task(n):
print('%s is runing' %n)
time.sleep(n)
if __name__ == '__main__':
start_time=time.time()
p1=Process(target=task,args=(1,),name='任务1')
p1.start() # 启动进程
print(p1.pid) # 获取进程pid
print(p1.name) # 获取进程名字
p1.terminate() # 终止进程
p1.join() # 提高优先级
print(p1.is_alive()) # 获取进程的存活状态
print('主')
孤立とゾンビプロセス
孤児プロセス:
開封後は、子プロセスを指し、親プロセス子が死ぬ前に、それは子プロセスが孤立と呼ばれています。
孤児プロセスは、オペレーティングシステムになります子プロセスが引き継ぎ、親プロセスの終わりに、その存在のために必要がある、無害です。
ゾンビプロセス:
親プロセス、および親が子供、占有リソースを解放するために子プロセスを回復していない第一の端部を指し、そして子供がゾンビプロセスが、これはLinuxでのみ起こるとなります。プロセス内の窓は関連がないとは完全に独立しているため。
親プロセスが最初に終了した場合、子供は、オペレーティング・システムを引き継ぐことです、子プロセスが占有し、そのリソースを出た後、オペレーティングシステムが回復します、
Pythonは自動的にリサイクルゾンビを処理するために私たちを支援してきました。