python3 进程间通信之socket.socketpair()

socket.socketpair()是什么鬼东西?

socket.socketpair()函数仅返回两个已经连接的套接字对象,参数和socket.socket()里的参数一样的用法。

socket.socketpair()可以理解为 创建了两个socket, 比喻为一个server的 socket,一个client的socket,这两个socket是已经connected连接状态

socket.socketpair()是全双工模式,也就是每个socket都能收发,比喻为server.send--->client.recv,和 client.send--->server.recv

socket.socketpair()默认是创建unix套接字

用例子理解:

1.单个进程中的 socket.socketpair

a,b=socket.socketpair()print(a)print(b)

a.send(b‘hello‘)

brecv=b.recv(1024)print(‘b recv‘,brecv.decode())

b.send(‘你好啊‘.encode())

arecv=a.recv(1024)print(‘a recv‘,arecv.decode())

结果:

b recv hello

a recv 你好啊

2.多个进程os.fork()中的 socket.socketpair

os.fork 就是克隆进程,在主进程中创建子进程,并复制主进程所有内存地址到子进程中,并一起执行fork之后的代码块,父子进程会返回不同的pid号 来区别是主进程(主进程返回子进程pid)还是子进程(子进程返回pid 号0)

importosimportsocket

socket1,socket2=socket.socketpair()

pid=os.fork()if pid==0:print(‘子进程‘)print(‘子进程-‘,socket1,id(socket1))print(‘子进程-‘,socket2,id(socket2))else:print(‘父进程‘)print(‘父进程-‘,socket1,id(socket1))print(‘父进程-‘,socket2,id(socket2))

结果:

父进程

父进程- 4334200680

父进程- 4334200776

子进程

子进程- 4334200680

子进程- 4334200776

说明:

1.os.fork() 复制了主进程所有内存地址到子进程,所以 子进程和父进程现在都有两个一样(id结果一样)的socket   (socket1,socket2)

2.所以可以在各个进程中用一个,关掉另外一个没用的,只留个自己用的socket就行,另一个对方用

importosimportsocket

socket1,socket2=socket.socketpair()

pid=os.fork()if pid==0:print(‘子进程‘)

socket1.close()

socket2.send(‘发给对方父进程‘.encode())else:print(‘父进程‘)

socket2.close()

recv=socket1.recv(1024)print(‘父进程收到:‘,recv.decode())

父进程

子进程

父进程收到: 发给对方父进程

3.多进程multiprocessing中的 socket.socketpair   同 os.fork()原理

importsocketfrom multiprocessing importProcess

socket1,socket2=socket.socketpair()deftest():print(socket1)print(socket2)

p1=Process(target=test)

p2=Process(target=test)

p1.start()

p2.start()

importsocketfrom multiprocessing importProcess

socket1,socket2=socket.socketpair()deftest():print(socket1)print(socket2)#socket2.close() #可以不close, 但是没有意义,除非在单个进程里 socket1 和socket2这两个自己和自己玩 一个发,一个接

print(‘socket1 send to socket2 hello‘)

socket1.send(b‘hello‘)deftest2():print(socket1)print(socket2)#socket1.close()

recv=socket2.recv(1024)print(‘test2 recv‘,recv.decode())

p1=Process(target=test)

p2=Process(target=test2)

p1.start()

p2.start()

socket1 send to socket2 hello

test2 recv hello

4.多线程Thearding中的 socket.socketpair   同单个进程中的 socket.socketpair原理

1.多线程都是 在一个进程中执行,没有复制进程的概念,所以 只有一个socketpair  对,所以不能close 任何一个 socket, 如果关了,这个唯一的一对连接可就断了,就不能收发工作了

2.多进程这种可以close 是因为子进程复制又复制了一对socketpari(),就像创建了快捷方式,删除一个就好像 删了快捷方式 ,文件还在,如果文件也删了就真的关闭了,没法通信了

importsocketfrom threading importThread

socket1,socket2=socket.socketpair()deftest():print(‘socket1 send to socket2 hello‘)

socket1.send(b‘hello‘)deftest2():

recv=socket2.recv(1024)print(‘test2 recv‘,recv.decode())

p1=Thread(target=test)

p2=Thread(target=test2)

p1.start()

p2.start()

socket1 send to socket2 hello

test2 recv hello

原文:https://www.cnblogs.com/lijinlei521/p/12707815.html

python3 socket send,python3 进程间通信之socket.socketpair()相关推荐

  1. python进程socket通信_python3 进程间通信之socket.socketpair()

    python3 进程间通信之socket.socketpair() socket.socketpair()是什么鬼东西? socket.socketpair()函数仅返回两个已经连接的套接字对象,参数 ...

  2. python3 socket send sendall 区别

    在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags]) 发送TCP数据,返回发送的字节大小. ...

  3. python3模块socket怎么安装_Python中socket模块的使用方法(一)

    socket(中文名称:套接字)是应用层与传输层(TCP/UDP协议)的接口.是对TCP/IP的封装.是操作系统的通信机制.应用程序通过socket进行网络数据的传输.Python中的socket是我 ...

  4. Unix domain socket 简介(进程间通信,进程通信)

    Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信.socket 原本是为网络通讯设 ...

  5. python socket send_Python socket.send方法代码示例

    本文整理汇总了Python中socket.send方法的典型用法代码示例.如果您正苦于以下问题:Python socket.send方法的具体用法?Python socket.send怎么用?Pyth ...

  6. c语言 socket send,C语言中send()函数和sendto()函数的使用方法

    C语言send()函数:经socket传送数据头文件: #include #include 定义函数: int send(int s, const void * msg, int len, unsig ...

  7. 2-3 建立简易TCP服务端、客户端【socket server/client】【socket、bind、listen、accept、send、closesocket】【conect、recv】

    2-3 建立简易TCP服务端.客户端 文章目录 2-3 建立简易TCP服务端.客户端 0-前言 1-服务端简易功能 2-客户端简易功能 3-代码逻辑 4-服务端 4-1 建立socket 4-2 绑定 ...

  8. linux socket send函数和recv函数详解以及修改缓冲区大小

    一.send/recv详解 1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程 ...

  9. python中socket怎么用_Python 之socket的应用

    本节主要讲解socket编程的有关知识点,顺便也会讲解一些其它的关联性知识: 一.概述(socket.socketserver): python对于socket编程,提供了两个模块,分别是socket ...

最新文章

  1. github上好的c语言项目,2019 github热门项目
  2. php utf8 html字符,PHP:utf-8编码,htmlentities给出了奇怪的结果
  3. 左神算法:将搜索二叉树转换成双向链表(Java版)
  4. 信息收集——指纹识别
  5. java上传文件以流方式判断类型
  6. 计算机应用技术的创新
  7. jsp不能使用return时候,如何在出异常时退出,不在向下执行
  8. Java三大器之过滤器(Filter)的工作原理和代码演示
  9. 《敏捷制造——敏捷集成基础结构设计》——2.3 集成基础结构数据访问模型
  10. 简单易用的安装文件制作工具NSIS的使用demo示例
  11. .net core webapi 导出excel(两种方式EPPLUS、NPOI),返回下载地址或文件流
  12. WPF编程宝典(Pro wpf in c# 2012)(文摘)
  13. photoshop 前端切图基础教程
  14. 安装显卡后计算机无法启动,Win10更新显卡驱动后无法开机进入系统的解决方法...
  15. 基于领域模型的微服务划分--实战案例解析
  16. 查找并删除EXCEL文件中的重复行(整行重复)
  17. 如何分辨iphone 的冷屏与暖屏
  18. 爬虫Scrapy框架运用----房天下二手房数据采集
  19. Html 后端了解基础
  20. 深度学习笔记其五:卷积神经网络和PYTORCH

热门文章

  1. 我的世界java正版号ID_我的世界Java版帐号将迁移至微软帐号和相关注意事项FQA...
  2. JXL自动换行的实现
  3. android手机关机充满电,充电线不拔出开机,电量显示1%,手机显示充电越充越少的原因分析以及解决方法【图文教程】...
  4. 深圳五险(养老保险、工伤保险、生育保险、失业保险,医疗保险)的那些事儿~2020年梳理
  5. 米云平台Python调用
  6. 视频去水印或字幕【通用】
  7. python颜色函数_颜色空间及cv2.cvtColor 转换函数
  8. .NET 换肤软件 IrisSkin 2.0 破解版下载及多款皮肤下载
  9. wps插入图片后使图片完整显示
  10. [Excel]单元格