Java教程

进程间的通信

本文主要是介绍进程间的通信,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

方式1 queue队列 先进先出

进程之间默认是没有关联的,进程间的通信就是解决这个问题

from multiprocessing import Queue, Process这是解决普通进程间的通信
from multiprocessing import Manager, Pool这是解决进程间的通信

queue是阻塞的

from multiprocessing import Queue, Process
import os
import time

def write(q):
    for value in [1, 2, 3]:
        print("put %d to queue"%value)
        q.put(value)
        time.sleep(1)

def read(q):
    while True:
        if not q.empty():
            value = q.get()
            print("get %d from queue" % value)
            time.sleep(1)
        else:
            break

if __name__ == "__main__":
    queue =Queue()
    pw = Process(target= write, args=(queue,)) ##这里就是把queue当作一个参数穿了进去。这样两个进程就和同一个queue相关联
    pr = Process(target=read, args=(queue,))
    pw.start()
    pw.join()
    pr.start()
    pr.join()
    print("complete")
Result:

put 1 to queue
put 2 to queue
put 3 to queue
get 1 from queue
get 2 from queue
get 3 from queue
complete

 

进程池之间的通信

from multiprocessing import Manager, Pool
import os
import time

def write(q):
    for value in [1, 2, 3]:
        print("put %d to queue"%value)
        q.put(value)
        time.sleep(1)

def read(q):
    #while True:
        #if not q.empty():
            #value = q.get()
           # print("get %d from queue" % value)
           # time.sleep(1)
        #else:
            #break
  
  for value in range(q.qsize()):
      print("get %d from queue" % q.get())

if __name__ == "__main__":
    q = Manager().Queue() #使用Manager中的Queue来初始化
    po = Pool()
    po.apply(write,(q,))#使用阻塞时创建进程, 这样就不用在read中使用死循环了
    po.apply(read,(q,))
    po.close()
    po.join()
    print("complete")
这篇关于进程间的通信的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!