python之路---并发编程之进程&IPC

IPC:进程间的通信

两种实现方式

管道:pipe

队列:queue(其实就是pipe+lock)

注意:两者实际上都是内存空间,不要往里面放入大数据,只能放数据量较小的消息

 IPC所解决的问题

1.当多个任务并发的去修改共享数据,就可能会造成数据错乱,我们通过加互斥锁使多个任务对共享数据的操作由并发变为“串行”,从而保证了共享数据的安全,而当出现需要修改多个共享数据的需求时,我们就得再次加锁处理

---->IPC帮我们解决了需要自己加锁的问题

2.进程间的内存空间是彼此隔离的,如何完成通信(数据交互),就需要寻求一种共享的东西,硬盘是共享的,但是读取硬盘的速度慢

---->IPC实现了一种内存空间上的共享(两个进程之间通过队列交流)

队列的使用

from multiprocessing import Queue

q = Queue(3)  # 设置队列存放大小

q.put('你好')
q.put({'name':"bob",'age':26})
q.put([1,2,3])


print(q.get())
print(q.get())
print(q.get())

注意

1.队列内可以存放的是python任意类型的数据

2.队列是先进先出

3.当put的数量大于队列允许放入的数量时,就会发生阻塞(block=True),直到队列中有消息被取走

4.当队列中的内容被取空时,get操作也会发生阻塞(block=True),直到有新的数据放入队列中

队列的其它参数

q.put(obj=,block=,timeout=)
q.get(block=,timeout=)

put()

obj:代表要放入队列的数据

block:默认为True,代表当放入的数据数量大于队列允许的数量时,就会发生阻塞;False,则直接抛出 queue.Full 异常

timeout:默认为-1,代表当发生阻塞时,会一直等待(等待队列中有数据被取走),如果阻塞时间大于自设置的时间,则抛出queue.Full 异常

get()

block:与put()的意思类似,默认值也为True

timeout:与put()的意思类似,默认值为-1

猜你喜欢

转载自blog.csdn.net/ltfdsy/article/details/82454388