zmq和socket的区别
阅读了 ZMQ 的 Guide 文档后,我的理解是,这是个类似于 Socket 的一系列接口,他跟 Socket 的区别是:普通的 socket 是端到端的(1:1的关系),而 ZMQ 却是可以N:M 的关系,人们对 BSD 套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而 ZMQ 屏蔽了这些细节,让你的网络编程更为简单。ZMQ 用于 node 与 node 间的通信,node 可以是主机或者是进程。
程序解释:
https://www.cnblogs.com/silence-cho/p/12657234.html
context = zmq.Context() #创建上下文
socket = context.socket(zmq.PUB) #创建Response服务端socket
socket.bind("tcp://*:5555") #socket绑定,*表示本机ip,端口号为5555,采用tcp协议通信
# 将address指向的sockaddr结构体中描述的一些属性(IP地址、端口号、地址簇)与socket套接字绑定,也叫给套接字命名。调用bind()后,就为socket套接字关联了一个相应的地址与端口号,即发送到地址值该端口的数据可通过socket读取和使用。当然也可通过该socket发送数据到指定目的。
对于Server,bind()是必须要做的事情,服务器启动时需要绑定指定的端口来提供服务(以便于客户向指定的端口发送请求),对于服务器socket绑定地址,一般而言将IP地址赋值为INADDR_ANY(该宏值为0),即无论发送到系统中的哪个IP地址(当服务器有多张网卡时会有多个IP地址)的请求都采用该socket来处理,而无需指定固定IP。
对于Client,一般而言无需主动调用bind(),一切由操作系统来完成。
numpy.frombuffer
numpy.frombuffer则是将一个bytes的缓冲区解释为一个一维数组,因此这个一维数组既没有自己的内存空间,也不是string类型,而bytes是不可改变的改变类型,因此内存空间也是不可写的,所以上面三个条件均不满足,WRITEABLE就为False了。
那么假如用numpy.frombuffer转换的不是bytes这种不可改变类型的数据,而是如float,list这种可改变类型的数据,是不是WRITEABLE就可以为True了呢?确实如此。
lock
【1】https://blog.csdn.net/JackLiu16/article/details/81267176 python threading 线程锁lock = threading.Lock() lock.acquire() lock.release()
multiprocess模块
https://www.cnblogs.com/haitaoli/p/9837697.html
manager = multiprocessing.Manager()
多进程的变量Manager.dict()在赋值的时候只能接收一层赋值
numpy.ndarray.tobytes
ndarray.tobytes(order='C')
构造包含数组中原始数据字节的Python字节。
构造Python字节,显示数据内存的原始内容的副本。bytes对象可以“C”或“Fortran”或“Any”顺序生成(默认为“C”顺序)。“Any”order表示C顺序,除非设置了数组中的F_continuous标志,在这种情况下,它表示“Fortran”顺序。
python基础之np.vstack()&np.hstack()
网友评论