zoukankan      html  css  js  c++  java
  • 进程通信和数据共享两种方式

    from multiprocessing import Process,Queue
    import time
    import random
    
    '''
    
    进程间两种方式传递数据
    项目方式:生产包子和吃包子
    进程的队列和线程的队列不一样
    线程队列queue.Queue() --------- 进程队列multiprocessing.Queue()
    '''
    def aoo(que):
        while True:
            #开始生产包子并放置到包子队列中
            rr = random.randint(1,100)
            que.put(rr)
            print("现在生产了%s号包子"%rr)
            time.sleep(1)
    
    def boo(que):
        while True:
            #开始再包子队列中拿包子吃
            qg = que.get()
            print("现在吃了%s号包子"%qg)
    
    if __name__ == "__main__":
        que = Queue()  #创建进程队列
        pros = []
        for i in range(3):    # 创建三个进程生产包子
            pro1 = Process(target=aoo,args=(que,))
            pros.append(pro1)         #把que传递到函数方法中实现共享队列
            pro1.start()
    
        pro2 = Process(target=boo,args=(que,))
        pros.append(pro2)
        pro2.start()    #创建一个进程吃包子
    
        for pr in pros:    #所有进程执行完后再执行
            pr.join()
        print("-------我是主Process进程")
        
         
    from multiprocessing import Pipe,Process
    
    def aoo(conn):
        conn.send("ddd")
        print(conn.recv())
    
    if __name__ == "__main__":
        parent_conn,child_conn = Pipe()  #创建管道便于信息互通
        pro = Process(target=aoo,args=(child_conn,))   #创建进程,并将子进程传递给函数conn
        pro.start()
        print(parent_conn.recv())
        parent_conn.send("jjjjj")
        pro.join()

     Manager

    from multiprocessing import Manager,Pipe,Process
    
    def aoo(dicts,lists,num):
        dicts[0] = 1
        dicts[8]="a"
        lists.append(num)
    
    
    if __name__ == "__main__":
        #创建Manager  实现数据共享
        manager = Manager()
        dicts = manager.dict()
        lists = manager.list()
    
        #创建三个进程
        pros = []
        for num in range(5):
            pro = Process(target=aoo,args=(dicts,lists,num))
            pros.append(pro)
            pro.start()
    
        for ie in pros:
            ie.join()
    
        print(dicts)
        print(lists)
  • 相关阅读:
    使用scrapy-redis 搭建分布式爬虫环境
    爬虫必备工具-chrome 开发者工具
    Python 中多进程、多线程、协程
    Python 中命令行参数解析工具 docopt 安装和应用
    什么是中台?
    ubuntu 18.04 上安装 docker
    深入理解 ajax系列第一篇(XHR 对象)
    scrapy 中 shell 出现 403 Forbiidden 解决方案
    python 的参数总结
    Python 的直接赋值、Deepcopy、Copy的区别
  • 原文地址:https://www.cnblogs.com/TKOPython/p/12461644.html
Copyright © 2011-2022 走看看