进程之间通信(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)
posted @ 2020-07-23 17:04  爱浪的跳蚤  阅读(173)  评论(0编辑  收藏  举报