プロセス間通信(インターPorcess通信は、IPCと呼ばれる)、我々は最初のキューを理解する必要があり、それはFIFOです。from multiprocessing import Queue
使用。
from multiprocessing import Queue
q = Queue(6)
for i in range(6):
q.put(i)
print('%d放入队列'%i)
print('********************************')
while True:
print(q.get())
キューので、2つのサブプロセス間の通信を介し。
from multiprocessing import Queue,Process
def produce(q):
q.put('hello')
def consume(q):
print(q.get())
if __name__ == '__main__':
q = Queue()
p = Process(target=produce,args=(q,))
p.start()
p1 = Process(target=consume,args=(q,))
p1.start()
生産者、消費者モデル
キューは、データはデータのみ要求処理キューすることができ、安全なプロセスです。
from multiprocessing import Queue,Process
import time,random
def producer(name,food,q):
for i in range(10):
time.sleep(random.randint(1,3))
f = '%s生产了%s%s'%(name,food,i)
print(f)
q.put(f)
def consumer(q,name):
while True:
food = q.get()
if food is None:
print('获取到一个空')
break
print('%s消费了%s'%(name,food))
time.sleep(random.randint(1,3))
if __name__ == '__main__':
q = Queue()
p1 = Process(target=producer,args=('张三','包子',q))
p2 = Process(target=producer,args=('李四','胡辣汤',q))
c1 = Process(target=consumer,args=(q,'王五'))
c2 = Process(target=consumer,args=(q,'yan五'))
p1.start()
p2.start()
c1.start()
c2.start()
p1.join()
p2.join()
q.put(None)
q.put(None)
JoinableQueue
from multiprocessing import JoinableQueue,Process
def producer(name,food,q):
for i in range(10):
time.sleep(random.randint(1,3))
f = '%s生产了%s%s'%(name,food,i)
print(f)
q.put(f)
q.join() #JoinableQueue的join代表阻塞 感知一个队列中的数据全部被执行完毕。
def consumer(q,name):
while True:
food = q.get()
print('%s消费了%s'%(name,food))
time.sleep(random.randint(1,3))
q.task_done() #提交一个回值,对q中的值的个数减一。
if __name__ == '__main__':
q = JoinableQueue()
p1 = Process(target=producer,args=('张三','包子',q))
p2 = Process(target=producer,args=('李四','胡辣汤',q))
c1 = Process(target=consumer,args=(q,'王五'))
c2 = Process(target=consumer,args=(q,'yan五'))
p1.start()
p2.start()
c1.daemon = True #设置为守护进程,主进程代码执行完毕之后,子进程自动结束。
c2.daemon = True
c1.start()
c2.start()
p1.join()
p2.join() #进程的join是感知一个进程的结束
消費者側には:
- 各時間は、データ取得、即ちトークンを送信:
q.task_done()
、フラグデータが正常に処理されます。
生産者側:
-
キューに入れたデータ、およびデータ・プロデューサーすべきデータすべての生産データを終えたときに、生産の各
join
信号は、生産データを停止している、データが処理されたときにデータが消費されるのを待たなければならない、join
障害物の終わりを。 -
すべてのタスクでの消費者は、消費します
-
プロデューサー
join
の知覚遮断するストップ -
すべての生産プロセスを終了
-
プライマリプロセスの
p.join
終了 -
プライマリプロセスの終了コード
-
デーモン(コンシューマ・プロセス)終了