zoukankan      html  css  js  c++  java
  • 进程之间通信(IPC) Inter Process communication

    进程之间通信(IPC) Inter Process communication

    基于文件 :同一台机器上的多个进程之间通信
        Queue 队列
            基于socket的文件级别的通信来完成数据传递的
    基于网络 :同一台机器或者多台机器上的多进程间通信
        第三方工具(消息中间件)
            memcache
            redis
            rabbitmq
            kafka
    

    生产者消费者模型

    ​ 爬虫的时候
    ​ 分布式操作 : celery
    ​ 本质 :就是让生产数据和消费数据的效率达到平衡并且最大化的效率

    import time
    import random
    from multiprocessing import Queue,Process
    
    def consumer(q): # 消费者:通常取到数据之后还要进行某些操作
        for i in range(10):
            print(q.get())
    
    def producer(q): # 生产者:通常在放数据之前需要先通过某些代码来获取数据
        for i in range(10):
            time.sleep(random.random())
            q.put(i)
    
    if __name__ == '__main__':
        q = Queue()
        c1 = Process(target=consumer,args=(q,))
        p1 = Process(target=producer,args=(q,))
        c1.start()
        p1.start()
    

    数据共享-Manager

    from multiprocessing import Process,Manager,Lock
    
    def change_dic(dic,lock):
        with lock:
            dic['count'] -= 1
    
    if __name__ == '__main__':
        # m = Manager()
        with Manager() as m:
            lock = Lock()
            dic = m.dict({'count': 100})
            # dic = {'count': 100}
            p_l = []
            for i in  range(100):
                p = Process(target=change_dic,args=(dic,lock))
                p.start()
                p_l.append(p)
            for p in p_l : p.join()
            print(dic)
    
  • 相关阅读:
    MQ的导出备份
    js中this的使用
    wordpress目录文件结构说明
    css3 rem的用法
    初探Backbone
    call 和 apply使用
    公告栏放honehoneclock和喂小老鼠flash
    什么是好单位与坏单位
    常用正则表达式
    gulp入门教程
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13367361.html
Copyright © 2011-2022 走看看