• ython实现进程间的通信有Queue,Pipe,Value+Array等,其中Queue实现多个进程间的通信,而Pipe实现两个进程间通信,而Value+Array使用得是共享内存映射文件的方式,所以速度比较快


    1.Queue的使用

    from multiprocessing import Queue,Process
    import os,time,random
    
    #添加数据函数
    def proc_write(queue,urls):
        print("进程(%s)正在写入..."%(os.getpid()))
        for url in urls:
            queue.put(url)
            print("%s被写入到队列中"%(url))
            time.sleep(random.random()*3)
    
    #读取数据函数
    def proc_read(queue):
        print("进程(%s)正在读取..."%(os.getpid()))
    
        while True:
            url = queue.get();
            print("从队列中提取到:%s"%(url))
    
    if __name__ =="__main__":
        queue = Queue()
        proc_writer1 = Process(target=proc_write,args=(queue,["ur1","ur2","ur3","ur4"]))
        proc_writer2 = Process(target=proc_write,args=(queue,["ur5","ur6","ur7","ur8"]))
        proc_reader = Process(target=proc_read,args=(queue,))
        proc_writer1.start()
        proc_writer2.start()
        proc_reader.start()
        proc_writer1.join()
        proc_writer2.join()
        proc_reader.terminate()
    

    2.Pipe的使用

    pipe用于两个进程间的通信,两个进程分别位于管道的两端,Pipe方法返回(conn1,conn2)代表一个管道的两端,Pipe方法有dumplex参数,若该参数为True,管道为全双工模式,若为Fasle,conn1只负责接收消息,conn2只负责发送消息.send和recv方法分别是发送和接收消息的方法,例如,在全双工模式下,可以调用conn1.send发送消息,conn1.recv接收消息,如果没有消息可以接收,recv方法会一直阻塞,如果管道已经被关闭,recv方法会抛出EOFError

    from multiprocessing import Pipe,Process
    import random,time,os
    
    def proc_send(pipe,urls):
        for url in urls:
            print("进程(%s)发送:%s"%(os.getpid(),url))
            pipe.send(url)
            time.sleep(random.random())
    
    def proc_recv(pipe):
        while True:
            print("进程(%s)接收到:%s"%(os.getpid(),pipe.recv()))
            time.sleep(random.random())
    
    if __name__ == "__main__":
        pipe = Pipe()
        p1 = Process(target=proc_send,args=(pipe[0],["url_"+str(i) for i in range(10)],))
        p2 = Process(target=proc_recv,args=(pipe[1],))
        p1.start()
        p2.start()
        p1.join()
        p2.terminate()
    --------------------- 
    作者:诸葛亮
    来源:博客园
    原文:https://www.cnblogs.com/gaosai/
    版权声明:本文为博主原创文章,转载请附上博文链接!


  • 相关阅读:
    推送(评论,点赞,关注)
    php组成数组
    week6 10 后端backend server和mongoDB通信
    week06 09 NodeJS Server as a RPCclient
    week06 08 postman 测试jsonrpc
    week06 07 创建RPC SERVER 换个镜像安装下载
    week05 06绑定滚动条 去抖动
    week05 05restful api
    week5 04 npm run build
    week5 03 continus loading news
  • 原文地址:https://www.cnblogs.com/gaosai/p/9825051.html
Copyright © 2020-2023  润新知