- 套接字(socket–插座)
1)通过一个协议,链接两个进程,主要是网络请求。
2)进程A向百度云上传文件,进程B向百度云下载文件,不会有冲突 - 管道
1)用文件的内存缓存区作为管道,实现进程间通信
- 匿名管道
主进程和子进程进行交互
- 具名管道
和匿名管道原理是一样的。不是不相关的进程也可以互相访问。
- 消息队列
就是一个存在内核内存空间中的列表。 (这就是它最原始的定义)
redis就是消息队列+socket
def save_to_queue(index,my_queue):
my_queue.put(index)
if __name__ == '__main__':
process_array = []
my_queue = Queue()
for i in range(10):
p = Process(target=save_to_queue,args=(i,my_queue))
process_array.append(p)
p.start()
for p in process_array:
p.join()
while True:
print(my_queue.get())
- 共享内存
进程访问内核态同一块内存
from multiprocessingimport Queue,Array,value
- 信号量
不是用来传递数据的,是用来传递消息的
1)进程B 等待进程A执行到某一步操作后才会启动
2)进程A–》发消息–》内核—》转发信息—》进程B