小白学python---------------并发编程之进程间通信(IPC机制)

一.进程间通信

进程之间对某些共享数据的修改其实就是一种进程间通信.那么共享数据应该存放在共享空间里.那么之前我们考虑到的共享空间就是硬盘,然后进程通过硬盘来进行通信.但是这种方案不完美.

那么可不可以使用内存作为共享空间呢?答案是可以的,有两种方式可以实现:

1.管道(pipe),不推荐

2.队列(pipe+锁),推荐

from multiprocessing import Queue

q = Queue(3)  # 先进先出,可以设置空间大小
# 注意:
#     1.队列占用的是内存空间
#     2.不应该往队列中放发数据,应该只存放数据量较小的信息

# 掌握的
# q.put(对象,锁,超时时间)  # 对象可以是任意的python数据类型
q.put('first')
q.put({'k':'second'})
q.put(['third',])

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

# 了解的
q.put('first', block=True, timeout=3)
q.put({'k': 'second'}, block=True, timeout=3)
q.put(['third', ], block=True, timeout=3)
q.put_nowait(44)  #==> q.put(4,block=False,)
# q.put(4,block=True,timeout=3)

print(q.get(block=True, timeout=3))
print(q.get(block=True, timeout=3))
print(q.get(block=True, timeout=3))
print(q.get(block=False, timeout=3))

'''
q.put()有三个参数,第二个参数block是阻塞,第三个timeout是超出时间,block=True才可以和timeout连用.

block默认是True,当队列满了,就会阻塞住,如果在timeout的超时时间内没有取出一个让队列空间有空余,就会报错

block=False时,当队列满了,就会立马报错
 
q.get()有三个参数,第二个参数block是阻塞,第三个timeout是超出时间.

block默认是True,当队列取空了,就会阻塞住,如果在timeout的超时时间内没有新的元素添加到队列中,就会报错.

block=False时,当队列取空时,就会立马报错

'''

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/82454546
今日推荐