进程之间通信(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)