IPC通信

进程之间通信 IPC

Inter Process Communication

from multiprocessing import Queue,Process

def son(q):

print(q.get())

if name == 'main':

q = Queue()

p = Process(target=son,args=(q,))

p.start()

q.put(123)

在进程之间维护数据的安全 -- 进程安全

队列是进程安全的(进程队列保证了进程的数据安全)

队列都是先进先出的

队列是基于文件 + 锁实现的

队列一共提供两个方法:get put

q = Queue()

q.put({1,2,3})

num = q.get() # get是一个同步阻塞方法,会阻塞直到数据来

print(num)

q = Queue(2)

q.put({1,2,3})

q.put({1,2,3})

q.put({1,2,3}) # put是一个同步阻塞方法,会阻塞直到队列不满

import queue

q = Queue(2)

try:

for i in range(4):

q.put_nowait(i) # put_nowait 同步非阻塞方法

except queue.Full:

print(i)

q2 = Queue(2)

try:

print(q2.get_nowait())

except queue.Empty:pass

q = Queue(5)

ret = q.qsize() # 查看当前队列有多少值

print(q.empty())

print(q.full())

生产者消费者模型

队列Queue = 管道Pipe + 锁

Pipe 基于文件实现的(socket+pickle) = 数据不安全

Queue 基于文件(socket+pickle)+锁(lock)实现的 = 数据安全

基于pipe+锁(lock)实现的

IPC:

# 内置的模块实现的机制 :队列\管道
# 第三方工具 : redis rabbitMQ memcache
posted @ 2019-09-24 15:44  风景!  阅读(121)  评论(0编辑  收藏  举报