wukongqueue 跨网络通信队列服务开源项目

我要开发同款
匿名用户2020年02月18日
28阅读
开发技术Python
所属分类服务器软件、缓存服务器
授权协议MIT

作品详情

一个纯Python3实现的轻量且易于使用的跨网络队列服务。

此项目主要分为client端和server端,队列数据保存于server,同时server和client可以同时操作队列,支持多个client,本地队列是基于python3标准库queue实现,项目核心主要是基于TCP长连接进行跨网络传输队列数据,同时确保client的操作是线程安全的。

特点:

快,基于TCP长连接通信支持自动重连支持认证支持连接池上手快,api使用与标准库queue保持一致

例子:

server.py

fromwukongqueueimportWuKongQueueimporttime#startaqueueserversvr=WuKongQueue(host='127.0.0.1',port=666,max_conns=10,max_size=0)withsvr:print("svrisstarted!")svr.put(b"1")svr.put(b"2")print("puttedb'1'andb'2',waitforclients...")time.sleep(10)print("svrclosed!")

clientA.py

fromwukongqueueimportWuKongQueueClientclient=WuKongQueueClient(host='127.0.0.1',port=666)withclient:print("got",client.get())#b"1"client.task_done()importtimewait=5time.sleep(wait)print("after%sseconds,got"%wait,client.get(block=True))#waitforawhile,thenprintb"2"client.task_done()print("clientA:alltaskdone!")

clientB.py

fromwukongqueueimportWuKongQueueClientclient=WuKongQueueClient(host='127.0.0.1',port=666)withclient:client.join()print("clientBalltaskdone!")

按上面的顺序启动三个程序,可以看到如下效果:

#server.py首先打印svrisstarted!(马上)puttedb'1'andb'2',waitforclients...(马上)svrclosed!(10秒后)#clientAprintsecondlygotb'1'(马上)after5seconds,gotb'2'(5秒后)clientA:alltaskdone!(马上)#clientBprintlastlyclientBalltaskdone!(与clientA的alltaskdone同步)连接池:fromwukongqueueimportConnectionPool,WuKongQueueClientpool=ConnectionPool(host="localhost",port=2020,max_connections=3)client=WuKongQueueClient(connection_pool=pool)

暂不支持的功能(也是TODO):

持久化

我可以使用吗:此项目自诞生起就引入我的一个大型分布式爬虫项目中,目前持续运行中,项目至今迭代了6个版本。

后:连接池设计部分受redis库启发,读者如有兴趣可阅读源码与我讨论~

希望大家能够关注一下,给予我持久更新此项目的动力^_^

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论