deepfos系统使用的unix socket协议
Project description
介绍
本项目提供Python进程间通信的基础功能,适用于多进程编程中一主多从的编程模型。
项目中的Server可在主进程启动,Client在(多个)子进程中启动,客户端发送的消息能够被服务端接收, 并且对于不同的消息类型,可以注册不同的回调逻辑。 项目预置了一些常用通信协议,同时也提供简便的自定义通信协议的接口。
进程间通信基于unix socket实现,因此不能在windows系统中运行。
Quick Start
- 启动服务端
from dip import Server
import asyncio
def cb(req, mtype, data):
print(data['hello'])
server = Server('/tmp/run.sock', callback=cb)
asyncio.run(server.serve_forever())
- 使用客户端发送消息
from dip import Client
cli = Client('/tmp/run.sock')
cli.send_json({'hello': 'world'})
服务端将会输出
>>> 'world'
自定义通信协议
如果需要自定义进程间通信时传输字节流的格式,可以使用自定义Protocol
import typing
from dip import Protocol
class NewProtocol(Protocol, mtype=b'N'):
@classmethod
def _decode(cls, buf: bytes) -> typing.Any:
pass
@classmethod
def _encode(cls, data: typing.Any) -> bytes:
pass
自定义通信协议需要使用一个byte作为标识(mtype),并且必须实现_decode
和_encode
两个方法。其中:
_encode
用于将python对象序列化为字节流_decode
用于将字节流反序列化为python对象
两者一般互为逆操作,即对于python对象obj
:
obj == Protocol.decode(Protocol.encode(obj))
注: 这并不是硬性规定,只是一种通常做法
下述是一个非常粗糙的固定字符串压缩协议的实现
from dip import Protocol
from dip import errors
class StringMappingProto(Protocol, mtype=b'S'):
MAP = {
'Hello World': b'h',
}
MAP_REV = {
v: k for k, v in MAP.items()
}
@classmethod
def _decode(cls, buf: bytes) -> str:
data = cls.MAP_REV.get(buf)
if data is not None:
return data
else:
raise errors.ProtoDecodeError(f'Cannot decode byte: {buf!r}')
@classmethod
def _encode(cls, data: str) -> bytes:
compressed = cls.MAP.get(data)
if compressed is not None:
return compressed
else:
raise errors.ProtoEncodeError(f'Cannot encode string: {data!r}')
使用客户端发送消息:
cli.send_msg('S', 'Hello World')
将会在服务端接收到消息 Hello World
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
deepfos-ipc-protocol-1.2.1.tar.gz
(14.4 kB
view hashes)
Built Distribution
Close
Hashes for deepfos-ipc-protocol-1.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76e51f8a691b8685b38004dbe57ef8a3412ac7f773092ce6418c47714e322f4e |
|
MD5 | 90d6a8b4d3b306602feac5fe46e424d3 |
|
BLAKE2b-256 | 2e502ee2c456db7ec3de6363ca9ee76105ab74a222ad83159c6e17c7c42a1d86 |
Close
Hashes for deepfos_ipc_protocol-1.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eff3eed897b291d3b4384dd4a865bc7ec3694e389445903b02b591f77007f6aa |
|
MD5 | 5fc03e744c14cf57e859bdc50cdf29bb |
|
BLAKE2b-256 | 91e0cd190e88d87431136343c9e68446e7edd3f23f0d940fbbdb0c2947a3f707 |